一对一映射的延迟加载问题

时间:2010-12-02 15:13:40

标签: java jpa foreign-keys entity-relationship

我有两个非常简单的POJO,我之间只有一对一的映射。

  1. contact.java
  2. comment.java - 它有contact.java的外键列
  3. 我写的代码如下。

    contact.java

    @OneToOne(optional= false,cascade = CascadeType.ALL, mappedBy="contact", fetch=FetchType.LAZY)
    @org.hibernate.annotations.LazyToOne(org.hibernate.annotations.LazyToOneOption.NO_PROXY)
    private Comment mComment;
    

    comment.java

    @OneToOne(fetch = FetchType.LAZY,cascade=CascadeType.ALL )
    @JoinColumn(name="EW_CNTC_ID")
    private Contact contact;
    

    我正在设置评论联系pojo,最后我正在保存contact.java

    如果我保留@OneToOne(可选= false,我得到dataintegrityexception,constraintvoilationexception

    如果我改变了@OneToOne(可选=真,那么它正在工作。

    我认为如果可选是假的,它试图插入联系人,它发现注释它试图插入注释,但它有引用联系它必须设置外键而不插入联系人它不能保留外键。 。 如果可选,则可以插入联系人而不进行评论,并且在联系人的外键列中设置为联系人生成的PK .---无论如何,此问题已得到解决。

    我正在加载联系人的另一件事我需要延迟加载评论,这是没有工作可以帮助这个,我严格需要延迟加载评论,因为性能问题。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

我们在hibernate 3中遇到过这个问题.Hibernate 4解决了这个问题。

如果您只想加载不是评论的联系人,请尝试这样做(暗示将其更改为多人关系)。

@ManyToOne(fetch=FetchType.LAZY)
private Comment mComment;