2017-09-25 79 views
0

包含的某個字段@Entity類:你如何執行的集合的最小尺寸在JPA或者Hibernate

@JsonProperty("arrays") 
@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "systemID", nullable = true) 
private List<PVArray> arrays = null; 

定義的集合。下一步是強制arrays必須有一個或多個條目。

該系統正在使用Spring Boot進行開發,使用Jackson進行JSON序列化/反序列化,並使用Hibernate和JPA進行持久化。

我覺得像這樣的約束必須手動執行。我還沒有找到任何描述這個約束的註釋。 setter中的手動執行似乎不夠 - 如果傳入的JSON根本沒有arrays字段?二傳手永遠不會被調用,也不可能執行。

是否有可能編寫JSON反序列化後調用的方法?或者更一般地說(因爲顯然這些類除了反序列化JSON之外還有其他方法實例化),這是一種在實例化對象結束時調用的方法,以便可以強制執行對象約束?

我有其他限制要考慮,而不僅僅是某些集合的大小。例如,一個類只能設置其中一個字段,而不是兩個字段。

+1

https://docs.oracle.com/javaee/7/ api/javax/validation/constraints/Size.html –

+0

這不是jpa,它只是堅持你擁有的東西。 Java bean驗證API是你需要的。更新問題和標籤 – DN1

+0

謝謝你的指針 - 另一個廚房水槽學習。我可以在幾天內嘗試@Size。 –

回答

1

你可以做這樣的事情:

@Size(min=1, max=10) 
@JsonProperty("arrays") 
@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "systemID", nullable = true) 
private List<PVArray> arrays; 

隨着大小你是說至少你從1至10的元素需要