我需要实现一个查询表单,为用户提供机会 建立自己的标准, 基于选择属性,运算符(=,<>,like,not like,in, 不是......)和价值, 将它们与AND,OR逻辑运算符相结合。我想存放 有一个单独的标准 我的数据库中的实体。
之前有没有人有这样的要求? 我应该走哪条路:ICriteria还是HQL?还有其他选择吗?
我非常感谢任何想法,建议,指示......
THX a mil。 达科
答案 0 :(得分:2)
我实施了相似的要求。我正在使用Criteria API,因为您不必使用字符串操作将查询放在一起,这使得它更稳定。
我在this question中发布了一个简单示例,如何将动态查询放在一起。
在我们的解决方案中,我不允许OR操作,因为它使它非常复杂(也是UI部分)并且性能可能变坏。但是后来我们也可能会实现它。
需要根据您的要求以及查询和数据结构的复杂性来制定设计决策。
例如,我为每个查询创建了一个过滤器类。过滤器类包含预定义字段。这使得它更稳定,因为您总是知道哪些字段可以存在,并且可以将它们放在查询中的某些位置。某些字段需要子查询。在我们的例子中,不可能使它完全通用(这意味着:应该如何构建查询的所有信息都存储在过滤器中)。每个过滤器类都有特定的方法将其转换为查询。这为您提供了很大的灵活性。
我的标准包括对字段,运算符(枚举)和参数的引用。