我正在使用JPA来建模和持久化我的实体。 我有几个"参考"简单地存在于数据库中并在具有@ManyToOne关系的许多实体中使用的实体。只应查询,不更新或插入这些参考实体。
例如,我的 ReferenceCurrency 实体包含(" EUR"," Euro")和(" USD",& #34;美元")。我不想在我的系统中获得新货币,因为有人写了像#USF")的错字。
示例实体:
@Entity
@Table(name = "CURRENCY")
public class ReferenceCurrency implements Serializable {
@Id
@NotNull
@Size(min = 1, max = 3)
@Column(name = "ID")
private String id;
@Size(max = 50)
@Column(name = "DSC")
private String description;
/* hashCode() + equals() */
}
@Entity
@Table(name = "ENTITY")
public class EntityA implements Serializable {
@Id
@NotNull
@Size(min = 1, max = 3)
@Column(name = "ID")
private String id;
@JoinColumn(name = "CURRENCY_ID", referencedColumnName = "ID")
@ManyToOne(optional = false)
private ReferenceCurrency currency;
/* hashCode() + equals() */
}
问题
*在Entity.currency字段中仅允许现有值的最佳方法是什么,如果货币不存在则不插入新值? AFAIK这不能简单地通过注释(bean验证或JPA注释)来解决。
我必须解析为检查ReferenceCurrency实体是否存在的@PrePersist / @PreConstruct方法?有更优雅的方式吗?*