1

次の2つのクラスがあります。

人間.java

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Human implements Serializable {

   private long id;
   private String name;
    ....
}

学生.java

@Entity
@DynamicUpdate
public class Student extends MyFactories {

    private List<Know> KnowList;

    @OneToMany(fetch = FetchType.LAZY)
    public List<Know> getKnowlist() {
        return knowlist;
    }

    public void setKnowlist(List<Know> KnowList) {
        return Knowlist;
    }
}

ノウ.java

@Entity
public class Know implements Serializable {

    private long id;
    private Human hu;
    private Student st;

    ....

    @ManyToOne 
    public Person getHu() {
        return hu;
    }

    @ManyToOne
    public Client getSt() {
        return st;
    }

    ....  setters .....
}

コード

            Know kw = new Know();
            kw.setSt(studentObject);
            kw.setHu(humanObject);
            session.save(kw);
            tx.commit();

Knowテーブルに挿入することはできますが、hibernateは作成したstudent_knowテーブルにレコードを挿入しません。

この回答を見つけましたが、常にすべてのレコードを取得したい場合は、その方法を使用する必要があると書かれています。私はそうしません(時々、知っているリストではなく、学生クラスを取得する必要があるかもしれません)

    System.out.println(this.student.getKnowList().size());

リストにアクセスしようとすると、次の例外が発生します。

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.myproject.Student.knowList, could not initialize proxy - no Session
4

2 に答える 2