java - 如何在 hibernate 中通过 ArrayList 保存多个对象?

标签 java hibernate arraylist

我有一个学生实体。我的想法是在 ArrayList 中收集多个学生对象,并将该列表中的所有对象保存到数据库中。什么时候使用@ElementCollection 注解?它适用于这样的情况吗?

学生:

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)

最佳答案

你必须做这样的事情:

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

如果你想保存实体,你应该映射它。 ArrayList<> 不是映射实体。学生有映射,所以你应该单独保存。

关于java - 如何在 hibernate 中通过 ArrayList 保存多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923108/

相关文章:

c# - 在 C# 中将一个数组列表数据移动到另一个数组列表

java - 显示选定的消息字符串

Java - 对包含特殊字符的对象列表进行排序

java - 如何将信息从 html 发送到 sql

java - 表中的列由多个物理列名引用

java - Spring @Transaction 不与 LocalContainerEntityManagerFactoryBean 一起使用

java - 为什么需要 main 方法才能在类中使用 arraylist 方法?

java - 使用express在 Node 服务器上接收JSON对象

oracle - Hibernate @OrderBy 与引用的类

php - 从日期间隔的数组列表中返回重叠量