1

我有以下两个课程,

人类.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

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吗?

于 2013-07-30T03:43:03.117 回答
1

您还需要使用 session.Update(studentObject) 将一行插入到 student_know 表中。

另请注意,在打开的 Hibernate 会话的上下文之外访问惰性关联将导致异常。关联

于 2013-07-30T04:34:47.203 回答