我有一個JPA實體包含多對一引用到另一個表,該實體的簡化版本如下:JPA /驗證@ManyToOne關係不應該創建新行
@Entity
@Table(name = "ENTITIES")
public class Entity implements Serializable {
@Id @NotNull
private String id;
@JoinColumn(name = "REFERENCE", referencedColumnName = "ID")
@ManyToOne(optional = false)
private ReferencedEntity referencedEntity;
}
@Entity
@Table(name = "REFERENCES")
public class ReferencedEntity implements Serializable {
@Id @NotNull @Column(name = "ID")
private String id;
@Size(max = 50) @Column(name = "DSC")
private String description;
}
查找實體工作正常。有效的實體也可以正常工作,在我的特殊設置中有點太好了,我需要一些額外的驗證。
問題
我的要求是,在表中的行參考是靜態的,不應該被修改或新行補充說。
目前,當我創建一個新的實體實例與不存在的(還)ReferencedEntity和持久化實例,一個新的行被添加到參考。
現在我已經在調用persist()之前在自己的validate()方法中實現了此檢查,但我寧願更優雅地執行此檢查。
使用枚舉而不是真正的實體不是一種選擇,我想在未來幾次不用重建/重新部署就自行添加行。
我的問題
什麼是實現這樣的檢查的最佳方式?
是否有一些BV註釋/約束可以幫助我限制這一點?也許是第三方圖書館?
ü可以標記實體'@ immuteable'如果你這樣做不想每次都改寫,其餘的取決於你的'persistence.xml'如何聲明 – emotionlessbananas
如果他使用的是Hibernate。 –
不,我沒有使用Hibernate。我使用EclipseLink作爲JPA實現。 – Bossk