問題是什么
?我目前正在開發一個Spring應用程式,作為大學專案的一部分,我們遇到了以下問題:
我有一個JPA-物體,它為一個States表建模,我希望有一個硬編碼的End-。
我有一個JPA-Entity,它為一個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 = "parenterStates", cascade = CascadeType.PERSIST)
private List<BillingItemState> nextStates;
}
到目前為止我所嘗試過的
我曾試圖通過使用@PrePersist、@PreUpdate和@PreDelete來執行該規則,但這似乎不是一個很好的解決方案,因為這讓我沒有辦法在資料庫創建時插入End-State。我還想到了一些不優雅的解決方案,比如為不可修改的最終狀態(Final-State)建立一個自己的表,但這也會引起一些問題。
是否有更合適的模式來實作這一任務?我覺得我在這里走了一條完全錯誤的道路。
(另外,這是我的第一個問題。
uj5u.com熱心網友回復:
我認為你需要的是@Immutable。
這個注解允許你使你的行不可更改(你將無法進行任何更新)。
但是插入操作和洗掉操作仍然是可能的。
為了擺脫洗掉的可能性,你可以嘗試@PreRemove,拋出一些例外或任何不同的邏輯。
為了初始化資料庫狀態 data.sql檔案應該不錯。
額外的資源
uj5u.com熱心網友回復:
我想說的是,如果你可以的話,嘗試將Final狀態建模為某種屬性,即一個boolean isEnd。這樣,你就不會有洗掉或設定靜態資料的問題了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/309830.html
標籤:
