2016-01-18 68 views
0

我需要使用休眠連詞或準則,爲了實現濾波器函數:休眠標準排他性限制

接受包含任何字母「A」的一個字符串,「F」,「C」,「I」至多一次以隨機順序。

返回一個Hibernate條件,當且僅當輸入的出現次數匹配應用的字符串時,條件纔會計算爲true。

例如:

1)輸入 'AFCI' 只有當施加在 'AFCI', 'ACIF', '反飢餓行動社', 'FIAC' 等

2)輸入「AI應返回true '只有在應用'AI'或'IA'時纔會返回true。如果字段爲'AIC','AIF','ACI','AFCI'等,應該返回false。

3)輸入'F'只有在'F'時才返回true。在其他情況下應該返回false,即使它包含'F',如'AF'或'FC'。

任何幫助將深受讚賞,因爲我被困在這裏太久了。

回答

1

有沒有在最壞(AFCI)情況下,許多排列,所以我們可以生成所有排列,並檢查它的平等

String toCheck = "AFCI"; 
List<String> permutations = createPermutations(toCheck); 

Criterion result = Restrictions.in("propertyToCheck", permuations); 

方法createPermutations()可以使用Collections2.permutations()從番石榴。

更新

我認爲,這個解決方案是專業的,因爲它是很容易理解。它將與任何數據庫一起工作。它可以很容易地在將來改變或者用額外的邏輯進行擴展。當然,它對大型字符串沒有很好的可擴展性。但對於小絃樂來說,它有很好的表現。

當然瞭解真正的專業人士的意見會很有意思。

+0

謝謝你的回答!如果計算所有排列組合不被認爲是「專業」,那麼可能會發生什麼? –

+1

@YiannisTsimalis我更新了答案。 –

+0

再次感謝您發帖,當然,我非常感謝您的努力。 –