簡體   English   中英

通過Hibernate + JPA在兩個實體中保存ID

[英]Save id in both entities via Hibernate + JPA

我有兩個具有OneToOne關系的實體,如下所示:

@Entity
@Table(name = "FOO")
Foo{

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "foo")
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    @JoinColumn(name = "BAR_ID")
    private Bar bar;

    // getters and setters
 }

 @Entity
 @Configurable
 @Table(name = "BAR")
 Bar{
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FOO_ID")
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    private Foo foo;

    // getters and setters
 }

在服務層中,我通過在Foo中設置Bar來建立連接:

 Bar.setFoo(foo);
 barDAO.saveOrUpdate(bar);

Wich將foo id保存在Bar表中。 但是相反的事情不會發生。 休眠是否可以保存僅創建一組的兩個ID? 我以為這已經可以了

您錯過了關系的另一面。

如果您說bar.setFoo(foo)那么在必須說foo.setBar(bar) ,當然也可以在setFoo方法中執行此操作。

級聯意味着它將觸發對該關系的操作,但是在您的情況下,由於缺少一側,該關系尚未完成。

您需要首先很好地了解這些關系。 據我所知,您可能會嘗試在FooBar之間建立雙向的OneToOne關系。

@Entity
@Table(name = "FOO")
Foo {

     @OneToOne(cascade = CascadeType.ALL)
     @JoinColumn(name = "BAR_ID")
     private Bar bar;

     // getters and setters
}

@Entity
@Table(name = "BAR")
Bar{

    @OneToOne(mappedBy = "bar")
    private Foo foo;

    // getters and setters
}

在雙向關聯中,關聯的兩側均退出-擁有和反向。 對於一對一的雙向關系,擁有方對應於包含適當外鍵的方。

這里的擁有方Foo而BAR_ID將是該外鍵。 兩端都有連接列是沒有意義的。 關系將從Foo層疊到Bar 此處的反面Bar ,需要用擁有方參考的值mapped by來注釋。

現在,如果你設置Bar在對象Foo它會持續的Bar對象與映射一起Foo 做相反的事情沒有道理。 是不是?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM