Проблема возникает, когда у вас есть псевдоним с тем же именем, что и у объекта objects. Hibernate, кажется, подобрать псевдоним и использовать его в SQL. Я нашел это задокументированное здесь и здесь , и я считаю, что это ошибка в Hibernate, хотя я не уверен, что команда Hibernate соглашается.
В любом случае, я нашел простую работу, которая работает в моем случае. Ваш пробег может варьироваться. Подробности приведены ниже, я попытался упростить код для этого примера, поэтому я прошу прощения за любые ошибки или опечатки:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("sectionHeader", sectionHeaderVar)) // <- Problem!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Будет производить этот sql:
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(y1_) like ? )
Что вызвало ошибку: java.sql.SQLException: ORA-00904: "Y1_": неверный идентификатор
Но, когда я изменил свое ограничение на использование «this», вот так:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Это произвело следующий sql, и моя проблема была решена.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(this_.SECTION_HEADER) like ? )
Вот так! Довольно простое решение проблемы. Я не знаю, как это исправление перешло бы к запросу на примере проблемы, но оно может приблизить вас.