次の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