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

Это если ключевые слова являются вашей таблицей соединений, и у вас есть набор правил в сущностях

Если это не так, можете ли вы показать сопоставления, пожалуйста, это может помочь.

Другие вопросы по тегам