簡體   English   中英

如何在使用@IdClass復合主鍵時命名@ForeignKey?

[英]How to name the @ForeignKey when using @IdClass composite primary key?

@Entity
@IdClass(MyPK.class)
public class SubEntity {
    @Id private int id;
    @Id private String name;
}

@Entity
public class ParentEntity {
    @OneToOne(cascade = ALL)
    @JoinColumn(name="fk_sub_id", foreignKey = @ForeignKey(name="fk_sub"))
    private SubEntity sub;
}

Caused by: org.hibernate.AnnotationException: A Foreign key refering SubEntity from ParentEntity has the wrong number of column. should be 2

由於@JoinColumn注釋,這會失敗。 但是我如何為復合PK寫它呢? 我必須使用此批注在hibernate自動生成期間設置foreignkey約束名稱。

對於復合鍵,您應該使用@JoinColumns

@JoinColumns(value = {
    @JoinColumn(name = "fk_sub_id", referencedColumnName = "id"),
    @JoinColumn(name = "fk_name", referencedColumnName = "name")},
    foreignKey = @ForeignKey(name = "fk_sub"))

更新:

在這種情況下,Hibernate似乎沒有遵循JPA 2.1規范。 您還需要另外包含hibernates自己的注釋,該注釋已棄用但仍然可以運行。 這應該添加如下:

@JoinColumns(value = {
    @JoinColumn(name = "fk_sub_id", referencedColumnName = "id"),
    @JoinColumn(name = "fk_name", referencedColumnName = "name")},
    foreignKey = @ForeignKey(name = "fk_sub"))
@org.hibernate.annotations.ForeignKey(name = "fk_sub")

暫無
暫無

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

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