2012-06-28 2 views
7

У меня есть QueryString вдоль линий:Hibernate - могу ли я использовать именованные и позиционные параметры?

session.createSQLQuery("SELECT C.FIRSTNAME AS firstName, C.LASTNAME as lastName FROM ADDRESSBOOK_CONTACT AS C WHERE C.ADDRESSBOOK_ID = :addressbookId AND firstName = ?"); 

При установке мой позиционный параметр, запрос запускается в обычном режиме, но нет никакого результата:

query.setParameter(0, "firstname1010"); 
query.setParameter("addressbookId", addressbook.getId()); 

Что неправильно. Если я изменю свое позиционное название на:

query.setParameter(firstname, "firstname1010"); 

Тогда мой запрос вернет правильные результаты.

Не вдаваясь в замысловатое объяснение, почему я это делаю, я хотел бы знать, должно ли поддерживаться смешивание двух типов или нет? Я использую спящий режим 3.6.3.Final

ответ

5

Из документов уровня класса на org.hibernate.Query:

Вы не можете смешивать и в том же запросе параметры удовлетворяют JDBC-типа и именованные параметры .

Таким образом, поведение, которое вы видите, полностью ожидается.