我有以下两个课程,
Human.java
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Human implements Serializable {
private long id;
private String name;
....
}
Student.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;
}
}
Know.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表中。
我找到了这个answer但它说我需要使用该方法,如果我总是想要检索所有记录。我没有(有时,我可能只需要检索学生班而不是其知道的列表)
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
答案 0 :(得分:2)
用于@OneToMany(fetch = FetchType.LAZY)
到@OneToMany(fetch = FetchType.EAGER)
的所选案例更改,以便您可以在其列表中获取数据。
对于插入内容,我需要澄清一下private Factory fac;
的关系或吸气剂设定者在哪里?
你至少应该有这样的东西:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "YOUR_FACTORY_ID_COLUMN")
private Factory fac;
public Factory getFac(){
return fac;
}
public void setFac(Factory fac){
this.fac=fac;
}
并且工厂有没有id?
答案 1 :(得分:1)
您还需要使用session.Update(studentObject),在student_know表中插入一行。
另请注意,在打开的Hibernate会话的上下文之外访问延迟关联将导致异常。 Link