gpt4 book ai didi

java - 使用 Hibernate 对多个属性进行动态查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:38 25 4
gpt4 key购买 nike

我有一个具有多个属性的模型。属性可以是原始的 (String) 或复杂的 (Object)。用户可以查询每个原始属性。我想知道是否有一种简单的方法来动态构建查询。我使用 Java 和 Hibernate。

模型

public class Model {
String prop1;
Point prop2;
List<Shape> prop3;
}

PointShape 是可以包含图元或对象的对象。查询的一个示例是 prop1 = "A"且坐标为 x = 3 和 y = 8 且其中一个形状为圆形的所有实例。

prop1 = "A"and prop2.x = 3 and prop2.y and prop3.get(i).type = "Circle";我们将不得不迭代 prop3 的所有实例。

我的第一个想法无法维护且效率低下。它包括对所有原始属性进行查询,然后合并结果。

  • 获取 prop1 = "A"的所有实例
  • 获取 prop2.x = 3 的所有实例prop3 = y;
  • 获取其中之一的所有实例Shape.type = "圆形";
  • 获取所有 3 个集合的交集

是否有任何现有的库或算法可以更好(更智能)地解决这个问题?

谢谢

最佳答案

你看过Criteria queries了吗? ?这是一个以编程方式构建查询和参数的 Hibernate 功能。

如果您的意图是查询符合所有这些条件的实体:

prop1 = "A" and prop2.x = 3 and prop2.y and prop3.get(i).type = "Circle"

支持association queries , 然后你可以做类似的事情

Criteria criteria = session.createCriteria(Model.class);
criteria.add(Restrictions.eq("prop1", "A"));
criteria.createCriteria("prop2")
.add(Restrictions.eq("x", 3));
.add(Restrictions.eq("y", 2));
criteria.createCriteria("prop3").add(Restrictions.in("type", "Circle"));

List results = criteria.list();

Criteria 查询的真正优势是在代码中而不是在 HQL 字符串中构建查询 - 允许您动态添加/设置属性等。

关于java - 使用 Hibernate 对多个属性进行动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com