2016-08-12 10 views
3

私は学生エンティティを持っています。私の考えは、ArrayListの複数の生徒オブジェクトを収集し、そのリストからすべてのオブジェクトをデータベースに保存することです。 @ ElementCollectionアノテーションはいつ使用しますか?このような状況にも適用されますか?hibernateでArrayList経由で複数のオブジェクトを保存するにはどうすればいいですか?

学生

package basic; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class Student { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    private String name; 

    public Student() { 

    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public String toString() { 
     return "Student [id=" + id + ", name=" + name + "]"; 
    } 

    public Student(String name) { 
     this.name = name; 
    } 

} 

ランナー

package basic; 

import java.util.ArrayList; 
import java.util.List; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class Runner { 

    public static void main(String[] args) { 

     SessionFactory sessionFactory = new Configuration().configure("/basic/hibernate.cfg.xml").buildSessionFactory(); 
     Session session = sessionFactory.openSession(); 
     session.beginTransaction(); 

     List<Student> students = new ArrayList<>(); 

     students.add(new Student("Michael")); 
     students.add(new Student("Dave")); 
     students.add(new Student("Tom")); 
     students.add(new Student("Dinesh")); 
     students.add(new Student("Lakshman")); 
     students.add(new Student("Cruise")); 

     session.save(students); 

     session.getTransaction().commit(); 
     session.close(); 
    } 

} 

エラー

Exception in thread "main" org.hibernate.MappingException: Unknown entity: java.util.ArrayList 
    at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620) 
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1596) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:104) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192) 
    at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177) 
    at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73) 
    at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:668) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:660) 
    at org.hibernate.internal.SessionImpl.save(SessionImpl.java:655) 
    at basic.Runner.main(Runner.java:27) 

答えて

8

を:

for(Student student : students) { 
    session.save(student); 
} 

エンティティを保存する場合は、マップする必要があります。 ArrayList <>がエンティティにマップされていません。生徒はマッピングがあるので、別々に保存する必要があります。

+0

私は今考えました。ありがとうございました! –

3

@ElementCollectionあなたがすべきここにあなたがオブジェクトのリストを保存するにはすてきなexplenation https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection

を持っている、あなたは、オブジェクトによって反復するために、このような何か必要 - - オブジェクト間の関係を定義するために使用します。このような何かをしなければならない>How to insert multiple rows into database using hibernate?

+0

ありがとうございました!!!!それは助けて! –

関連する問題