Hibernate 标准排他性限制

Hibernate criterion exclusive restriction

我需要使用 Hibernate Conjunction 或 Criterion 实现一个过滤函数:

以随机顺序最多一次接受包含任何字母 'A'、'F'、'C'、'I' 的字符串。

Returns 一个 Hibernate 标准,当且仅当输入出现与应用的字符串匹配时才评估为真。

例如:

1) 输入 'AFCI' 应该 return 仅当应用于 'AFCI'、'ACIF'、'AICF'、'FIAC' 等时才为真。

2) 输入 'AI' 只有应用于 'AI' 或 'IA' 时才应 return 为真。如果字段是 'AIC'、'AIF'、'ACI'、'AFCI' 等,应该 return false

3) 输入 'F' 只有应用于 'F' 才应 return 为真。在任何其他情况下应该 return false,即使它包含 'F',例如 'AF' 或 'FC'.

任何帮助将不胜感激,因为我被困在这个问题上太久了。

最坏(AFCI)情况下的排列不多,所以我们可以生成所有排列并检查它们是否相等

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

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

方法createPermutations()可以使用来自番石榴的Collections2.permutations()

已更新

我认为,这个解决方案很专业,因为它很容易理解。它适用于任何数据库。它可以在将来轻松更改或使用其他逻辑进行扩展。当然,它对于大字符串没有很好的可扩展性。但对于小字符串它有很好的表现。

当然,了解真正专业人士的意见会很有趣。