我遇到一個問題,我不知道是否可以通過使用hibernate/jpa註釋來解決問題。問題是我有一個組合鍵與我的外鍵複合ID具有相同的列,我想在表上共享同一列。例如:在組合鍵和@ManyToOne之間共享列JoinColumns
@Entity
class Id {
@Id
@Column(name = "idPessoa")
public Integer idShared;
}
@Embeddable
class APK {
@ManyToOne
@JoinColumn(name = "idShared")
public Id idShared;
public String nKey;
}
@Entity
class A {
@EmbeddedId
public APK id;
}
@Embeddable
class BPK {
@ManyToOne
@JoinColumn(name = "idShared")
public Id idShared;
public Integer nCode;
}
@Entity
class B {
@EmbeddedId
public BPK id;
@ManyToOne
@JoinColumns({ @JoinColumn(name = "idShared", nullable = false, insertable = false, updatable = false), @JoinColumn(name = "nKey", nullable = false) })
public A a;
}
的問題是我如何共享列idShared A和B之間,並用它在@ManyToOne外鍵?
我已經嘗試在名稱idShared中使用@JoinColumns中的@JoinColumn,但我得到一個錯誤,說我需要使用insert = false和update = false,我已經把insertable = false和updateable = false,但是然後我得到另一個錯誤,說我不能混合東西。
我發現了一個可能的解決辦法說使用:
@ManyToOne
@JoinColumnsOrFormulas(value = {
@JoinColumnOrFormula(formula = @JoinFormula(value = "idShared", referencedColumnName = "idShared")),
@JoinColumnOrFormula(column = @JoinColumn(name = "nKey", nullable = false)) })
public A a;
但它給我的錯誤:
Unable to find column with logical name in table A
看來,它必須找到列的「名稱」屬性有些空白。
需要一些幫助,請!
不能做個像'idshared'有您共享ID另一個類,然後把它加入到BPK和APK? – Angga
實際上,在我當前的代碼中,idShared是另一個類的ForeignKey,並且apk和bpk都將此外鍵指向idShared,但問題是我無法看到如何在創建FK時共享同一列到A內B –
我認爲解決方案是與JoinFormula的事情,但我找不到文件如何工作 –