web-dev-qa-db-ja.com

休止状態でArrayListを介して複数のオブジェクトを保存する方法は?

Studentエンティティがあります。私のアイデアは、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)
10

このようなことをしなければなりません:

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

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

19
ByeBye

オブジェクト間の関係を定義するために使用する必要がある@ElementCollection-ここでは、ニースの拡張 があります。https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection

オブジェクトのリストを保存するには、次のようなオブジェクトごとに反復する必要があります-> hibernateを使用してデータベースに複数の行を挿入する方法?

5