2016-08-12 50 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

我現在明白了。謝謝! –

相關問題