【问题标题】:createSqlQuery Hibernate, JavacreateSqlQuery 休眠,Java
【发布时间】:2013-03-30 03:01:50
【问题描述】:

我需要在 Java 领域编写休眠查询 (createSQLquery) 我有查询,但我有点迷失如何为我的查询创建条件。

基本上我必须将常规 where 子句转移到休眠 .add(Restriction)

举个例子:

where (name LIKE '%test%' or lastname LIKE '%test%') and (site_id = 2) and (date>=121212 and date <= 343343)

Query query = sess.createSQLQuery(sql).addScalar("ID", Hibernate.long);
query.add(Restrictions.or ( 
                            Restrictions.like("name", "%test%")
                            Restrictions.like("lastname", "Fritz%")
          ))
     .add(Restrictions.eq("site_id", new Integer(2)))
     .add(Restrictions.add(Restrictions.gr("date_start", 122122)
                       .add(Restrictions.le("date_end", 345433)));

我没有机会运行它,因为现在无法访问我的环境,只是想弄清楚这一点。

谢谢

【问题讨论】:

标签: java hibernate


【解决方案1】:

你必须这样做

    Criteria criteria = session.createCriteria(YourPojo.class);
    criteria.add(Restrictions.eq("id", id));
    criteria .add(Restrictions.or ( 
                        Restrictions.like("name", "%test%"),
                        Restrictions.like("lastname", "Fritz%")));
    criteria.add(Restrictions.eq("site_id", new Integer(2)))
    criteria.add(Restrictions.add(Restrictions.gr("date_start", 122122)
                   .add(Restrictions.le("date_end", 345433)));
    return (criteria.list());

【讨论】:

  • 我可以将 createCriteria() 与 QueryManager 一起使用吗?我现在有 sql 查询并创建 createSQLquery(sql).addScalar("id", Hibernate.long).setResultTransformer(Transformers.aliasToBean(POJO.class));在我必须应用限制之后。
  • 如果你想使用 sql 查询使用 CreateSQLQuery 否则使用条件
  • 我明白了,但在这种情况下如何将 WHERE 应用于我的查询。不敢相信这是不可能的。我的意思是如果某事属实,则添加限制。
  • 不,不是这样,您可以在 sql 查询上应用 where 子句。请通过此链接 mkyong.com/hibernate/hibernate-native-sql-queries-examples
【解决方案2】:

好的,问题就这样解决了:

从 XML 查询 - 我放入 where 子句

<Applications>
    <Application name="AlertData">
        <Query name="alerts">
            <SQL>
                SELECT 
                    mr.measurement_date as measurementDate,
                    ........ // more data
                FROM measurement m
                    LEFT JOIN tags     ON mr.tag_id = tags.tag_id
                    .......... // more joins
                WHERE
                    mr.site_id = :siteid
                    $searchConstraints$ // just a string
                    $dateStartFragment$ // just a string                                  
            </SQL>
        </Query>
    </Application>
</Applications>

下一个 Java 代码:

 if (search != null && !search.isEmpty()) {   
            searchFragment = " AND (UPPER(field1) LIKE :search" +
                              " OR UPPER(field2)  LIKE :search)";           
  }


  sql = this.prepareQuery(sql, ImmutableMap.of(
      "searchConstraints", searchFragment,
      "dateStartFragment", dateStartFragment
  ));


   Query query = this.sessionFactory.getCurrentSession()
                .createSQLQuery(sql) 
   //more query here



 if (search != null && !search.isEmpty()) {    
     query.setString("search", "%" + search.toUpperCase() + "%");            
 }



public String prepareQuery(String queryString, Map<String, String> templateVars) {
     ST stringTemplater = new ST(queryString, '$', '$');

      for (String key : templateVars.keySet()) {
          stringTemplater.add(key, templateVars.get(key));
      }

      String renderedQuery = stringTemplater.render();
      return renderedQuery;
}

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 2012-08-06
    • 1970-01-01
    • 2011-02-03
    • 2011-09-15
    • 2018-12-21
    • 1970-01-01
    • 2011-09-18
    • 2010-11-25
    相关资源
    最近更新 更多