我有一个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