Hibernate генерирует ошибку SQL, например ".=."
У меня есть 3 таблицы в БД Oracle, отношения которых @ManyToMany. Итак, у меня есть 2 значимые таблицы и одна для сопоставлений.
Я создаю классы с именем (если хотите, я могу показать свои классы) с именами Entities, Keywords (я понимаю, что присвоение имен неверно, но это не мой проект, я только оптимизирую).
Я использую спящий режим версии 4.3.4.
Я пишу запрос так:
session = HibernateUtil.getSessionFactory().openSession();
String sql = "SELECT DISTINCT r FROM Rules r, Entities e " +
" WHERE r.entities = e.rules " +
" AND e IN :entities ";
Query query = session.createQuery(sql);
query.setParameterList("entities", entitiesList);
List<Rules> rulesList = query.list();
НО! Hibernate генерирует странный SQL
Hibernate:
select
rules0_.rule_id as rule_id1_11_,
rules0_.rule as rule2_11_
from
rules rules0_,
entities entities1_,
rules_entities entities2_,
entities entities3_,
rules_entities rules4_,
rules rules5_
where
rules0_.rule_id=entities2_.rule_id
and entities2_.entity_id=entities3_.entity_id
and entities1_.entity_id=rules4_.entity_id
and rules4_.rule_id=rules5_.rule_id
and .=.
and (
entities1_.entity_id in (
? , ? , ? , ?
)
)
Когда я пытаюсь выполнить этот запрос, я получаю эту ошибку: java.sql.SQLException: ORA-00936: отсутствует выражение
Когда я копировал этот запрос в OracleDevepoler, ему не нравилось это выражение "и. =.". Без этого запрос выполняется правильно.
Что я делаю неправильно?
2 ответа
Может быть, вы использовали плохое соединение в своем запросе? Из контекста я заключаю, что вы должны использовать что-то вроде этого:
"SELECT DISTINCT r FROM Rules r inner join r.entities e " +
" WHERE e IN :entities ";
Я думаю, что правильный запрос может быть
select distinct e.rules from Entities where e.entityId in :entities
Это если ключевые слова являются вашей таблицей соединений, и у вас есть набор правил в сущностях
Если это не так, можете ли вы показать сопоставления, пожалуйста, это может помочь.