2016-10-05 76 views
-1

嗨,我是一个noob程序员。我不能让休眠sql查询

我正在学习Hibernate。而我对

SELECT COUNT(*) FROM zipcode a 
WHERE (ISNULL(:sido , '') = '' OR a.sido = :sido) AND 
(ISNULL(:sigungu , '') = '' OR a.sigungu = :sigungu) AND 
    (ISNULL(:eupmyun , '') = '' OR a.eupmyun = :eupmyun) AND 
    (ISNULL(:roadName , '') = '' OR a.road_name = :roadName) AND 
    (ISNULL(:ri , '') = '' OR a.ri = :ri) 

沮丧,我不能让这个sql查询冬眠....

Number num = (Number) session() 
       .createQuery(
         "SELECT COUNT(*) FROM ZipCode a WHERE (ISNULL(:sido , '') = '' OR a.sido = :sido) AND (ISNULL(:sigungu , '') = '' OR a.sigungu = :sigungu) AND (ISNULL(:eupmyun , '') = '' OR a.eupmyun = :eupmyun) AND(ISNULL(:roadName , '') = '' OR a.roadName = :roadName) AND(ISNULL(:ri , '') = '' OR a.ri = :ri) ") 
       .setParameter("sido", sido).setParameter("sigungu", sigungu).setParameter("eupmyun", eupmyun).setParameter("roadName", roadName).setParameter("ri", ri) 
       .list(); 

我试试这个SQL ... 我使用PostgreSQL 9.4和5.0冬眠。 *

请帮我

+0

PostgreSQL有一个错误,他们不认为这是一个错误,NULL有100多种数据类型之一,但不能在大多数数据类型之间进行转换。尽可能避免使用'setParameter(something,null)',除非您计划切换数据库。 – coladict

回答

0

1)而不是createQuery使用createSQLQuery在Bel流量:

Query query = session.createSQLQuery("SELECT COUNT(*) FROM zipcode a 
         WHERE (ISNULL(:sido , '') = '' OR a.sido = :sido) AND 
        (ISNULL(:sigungu , '') = '' OR a.sigungu = :sigungu) AND 
        (ISNULL(:eupmyun , '') = '' OR a.eupmyun = :eupmyun) AND   
        (ISNULL(:roadName , '') = '' OR a.road_name = :roadName) AND 
        (ISNULL(:ri , '') = '' OR a.ri = :ri) "); 

Number number =(Number)query.list().get(0); 

createQuery - 是一个HQL查询,而createSQLQuery是土生土长的数据库查询。

注意:请确保查询在一行中,否则您需要添加('+')concat运算符。