Criteria Query返回所有记录

时间:2015-04-13 06:08:20

标签: java sql hibernate

SQL:

String hql1 = "SELECT /* PARALLEL(MVR,16) PARALLEL(MVRS,16)*/  * FROM
ICM MINUS SELECT I1.* FROM ICM I1 , C1_ICM_STATIC I2 WHERE
I1.METRIC_DIRECTION=I2.METRIC_DIRECTION AND
I1.METRIC_NAME=I2.METRIC_NAME AND I1.METRIC_UNIT=I2.METRIC_UNIT AND
I1.TERMINATION_POINT_ID=I2.TERMINATION_POINT_ID AND
I1.TERMINATION_POINT_NAME=I2.TERMINATION_POINT_NAME AND
I1.TERMINATION_POINT_TYPE=I2.TERMINATION_POINT_TYPE";

条件查询

icms1 = (List<ICM>) session.createCriteria(ICM.class, hql1).list();

我已经使用SQL Developer执行hql1然后我只获得了one result,但是当我使用Criteria集成SQL查询时,它会在all records中返回ICM } table。

如果SQL查询在SQL Developer中只返回一个结果,为什么条件API会返回ICM表中的所有记录?

2 个答案:

答案 0 :(得分:1)

  

为什么条件API会返回ICM表中的所有记录?

从技术上讲,您没有使用条件api进行关联。

尝试这样的事情。 Refer.

 return criteria.createCriteria(A.class)
           .createCriteria("b", "join_between_a_b")
           .createCriteria("c", "join_between_b_c")
           .createCriteria("d", "join_between_c_d")
           .add(Restrictions.eq("some_field_of_D", someValue));

答案 1 :(得分:1)

您应该学习阅读API文档。

The second Session.createCriteria() argument是您要分配给根实体的别名。这不是HQL查询。不使用Session.createCriteria()执行HQL查询。它们是使用Session.createQuery()执行的。

顺便说一下,您的查询根本不是HQL查询。这是一个SQL查询。 SQL和HQL是两种不同的语言。要执行SQL查询,您需要createSQLQuery()