#sql #postgresql #hibernate
#sql #postgresql #спящий режим
Вопрос:
привет, я программист-новичок.
Сейчас я изучаю режим гибернации. И я разочарован
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 и hibernate 5.0.*
Пожалуйста, помогите мне
Комментарии:
1. В PostgreSQL есть ошибка, которую они не считают ошибкой, где NULL имеет один из более чем 100 типов данных, но не может быть преобразован между большинством из них. Вам следует избегать использования
setParameter(something,null)
как можно большего количества, если вы не планируете переключать базы данных.
Ответ №1:
1) Вместо createQuery
использования createSQLQuery
, как показано ниже:
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.