【发布时间】:2021-11-07 00:23:51
【问题描述】:
问题
我目前正在开发 Spring-Application 作为大学项目的一部分,我们遇到了以下问题:
我有一个 JPA 实体,它为 States 的表建模,我想要一个硬编码的 End-State,它始终存在于数据库中并且无法删除或修改。在最好的情况下,它应该有一个特殊的 id(例如0),所以它可以很容易地从应用程序中引用。
我也不能将States 建模为枚举,因为它们必须在运行时可配置。
代码
实体看起来像这样(缩写):
@Entity
public class BillingItemState {
@Autowired
private BillingItemStateRepository billingItemStateRepository;
@Id
private String id;
@NotEmpty
private String name;
@ManyToMany
private List<BillingItemState> parentStates = new ArrayList<>();
@ManyToMany(mappedBy = "parentStates", cascade = CascadeType.PERSIST)
private List<BillingItemState> nextStates;
}
到目前为止我已经尝试过什么
我尝试通过使用@PrePersist、@PreUpdate 和@PreDelete 来强制执行该规则,但这似乎不是一个很好的解决方案,因为这使我无法在创建数据库。我还想到了一些不太优雅的解决方案,比如为不可修改的 Final-State 拥有一个自己的 Table,但这也会引发一些问题。
是否有更合适的模式来完成这项任务?我觉得我在这里完全走错了路。
(另外,这是我的第一个问题。如果您对我的问题有任何改进,请发表评论:)
【问题讨论】:
标签: java database hibernate spring-data-jpa