我需要使用Hibernate Conjunction或Criterion实现过滤函数:
以随机顺序接受包含任何字母'A','F','C','I'的字符串。
返回一个Hibernate标准,当且仅当输入的匹配项与应用的字符串匹配时才会计算为真。
例如:
1)输入'AFCI'仅在应用于'AFCI','ACIF','AICF','FIAC'等时才应返回
2)输入'AI'只有在应用于'AI'或'IA'时才会返回true。如果字段为'AIC','AIF','ACI','AFCI'等,则应返回false。
3)输入'F'仅在应用于'F'时才返回true。在任何其他情况下都应该返回false,即使它包含'F',例如'AF'或'FC'。
任何帮助都将深表感谢,因为我长期陷入困境。
答案 0 :(得分:1)
在最坏情况(AFCI)中没有很多排列,所以我们可以生成所有排列并检查它的相等性
String toCheck = "AFCI";
List<String> permutations = createPermutations(toCheck);
Criterion result = Restrictions.in("propertyToCheck", permuations);
方法createPermutations()
可以使用guava中的Collections2.permutations()
。
<强>更新强>
我认为,这个解决方案很专业,因为它很容易理解。它适用于任何数据库。它可以在将来轻松更改或通过其他逻辑扩展。当然,它对于大型字符串没有良好的可扩展性。但对于小弦乐而言,它具有良好的性能。
当然,了解真正专业人士的意见会很有趣。