簡體   English   中英

如何正確設置休眠單向一對一映射

[英]how to properly set up hibernate unidirectional one-to-one mapping

我有兩個表在列上具有one-to-one映射。 我想使用注釋設置unidirectional one-to-one休眠映射,因為我希望能夠從聯接表中獲取結果,但不想對子表進行外部約束檢查。

這是我的快速代碼。

@Entity
@Table(name = "student")
public class student {

// primary key and other column definition here..

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="address_id")
    private Address address;

// getters and //setters
}

@Entity
@Tale(name = "address") 
public class address {
    @Id
    @GeneratedValue(generator = "hibernate-uuid")
    @GenericGenerator(name = "hibernate-uuid", strategy = uuid")
    @Column(name = "id", unique = true, length = 36, nullable = false)
    private String id;

    @Column(name="address_id")
    private String address_id;

    // getters and setters
}

當我嘗試插入學生時(但不是地址),以上給出了以下異常。

Caused by: org.hibernate.AnnotationException: A Foreign key refering com.test.Student from com.test.Address has the wrong number of column. should be 2

我在這里做錯了什么?

首先,在student課堂中將層疊類型更改為REFRESH(最好將其刪除)。 然后,如果它是單向的,則意味着另一部分將一無所知。 因此,您應該將referenceColumnName添加到您的@OneToOne

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE", nullable = false, insertable = false, updatable = false) @JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE", nullable = false, insertable = false, updatable = false) @JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE", nullable = false, insertable = false, updatable = false) @JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE", nullable = false, insertable = false, updatable = false)

通過此實現,您將不需要更新其他部分,而是可以加入並獲取所需的信息。

更新 PK_OF_THE_OTHER_TABLEaddress表的主鍵。 CURRENT_TABLE_COLUMN_REFERENCE也是您的外鍵(當前表的字段指向address表)-我假設您將一對一關系放在Student實體中。

暫無
暫無

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

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