【问题标题】:Hibernate- Disjunction with criterion.Example in QBEHibernate- 与标准的析取。QBE 中的示例
【发布时间】:2017-01-03 21:33:55
【问题描述】:

我想使用标准搜索我的数据库。多个字段的示例,或一起。也就是说,我想检索其中“field1”是我的搜索对象的示例或“field2”是我的搜索对象的示例的记录,其中 field1 和 field2 是顶级对象的子对象,并且每个对象都是相同的类型作为我的搜索对象。

我想做的是

 Disjunction or = Restrictions.disjunction(); 
 or.add(criteria.createCriteria("field1").add(searchObj));
 or.add(criteria.createCriteria("field2").add(searchObj)); 
 criteria.add(or); 

这不起作用,因为析取仅适用于条件on,而不适用于条件a。

我试过了

 Disjunction or = Restrictions.disjunction(); 
 or.add(Restrictions.eq("field1", searchObj));
 or.add(Restrictions.eq("field2", searchObj));
 criteria.add(or); 

但这在对象的主键上给了我一个 PropertyAccessException,说

 IllegalArgumentException occurred calling getter of [.....].pk

有什么方法可以通过示例子句之间的分离来执行 QBE?

【问题讨论】:

    标签: hibernate query-by-example


    【解决方案1】:

    我通过使用 DetachedCriteria 和子查询解决了这个问题:

    DetachedCriteria f1Crit = DetachedCriteria.forClass(SearchObj.class, "field1");
    f1Crit.add(searchObj); 
    f1Crit.setProjection(Property.forName("id"));
    
    DetachedCriteria f2Crit = DetachedCriteria.forClass(SearchObj.class, "field2");
    f2Crit.add(searchObj); 
    f2Crit.setProjection(Property.forName("id"));
    
    criteria.add(
        Restrictions.or(
            Subqueries.propertyIn("field1.id", f1Crit),
            Subqueries.propertyIn("field2.id", f2Crit))
        ); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多