[英]Select all records if parameter is null else return specfic item in JPA Criteria query
[英]Criteria Query returnig all records
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
,但是當我將SQL Query與Criteria
集成時,它將返回ICM
表中的all records
。
如果SQL
查詢在SQL Developer中僅返回一個結果,為什么要使用標准API返回ICM
表中的所有記錄?
為什么標准API返回ICM表中的所有記錄?
從技術上講,您沒有將標准api用於關聯。
嘗試這樣的事情。 參考。
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));
您應該學習閱讀API文檔。
第二個Session.createCriteria()
參數是要分配給根實體的別名。 這不是HQL查詢。 不使用Session.createCriteria()
執行HQL查詢。 它們使用Session.createQuery()
執行。
順便說一句,您的查詢根本不是HQL查詢。 這是一個SQL查詢。 SQL和HQL是2種不同的語言。 要執行SQL查詢,您需要createSQLQuery() 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.