代码之家  ›  专栏  ›  技术社区  ›  Sydney

基于Hibernate的多属性动态查询

  •  3
  • Sydney  · 技术社区  · 15 年前

    我有一个模型有几个属性。属性可以是基本(字符串)或复杂(对象)。用户可以对每个基元属性进行查询。我想知道是否有一个简单的方法来动态构建查询。我使用Java和Hibernate。

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

    Point Shape 可以包含基本体或对象的对象。查询的一个例子是prop1=“a”,坐标是x=3和y=8,其中一个形状是圆。

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

    • 获取prop1=“A”所在的所有实例
    • prop3=y;
    • Shape.type =“圆圈”;
    • 得到所有3组的交集

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

    谢谢

    1 回复  |  直到 15 年前
        1
  •  2
  •   matt b    15 年前

    你看过吗 Criteria queries ? 它是一个Hibernate特性,用于以编程方式构造查询和参数。

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

    prop1=“A”和prop2.x=3以及prop2.y和prop3.get(i).type=“圆形”

    支持 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();