0

我在 Oracle DB 中有 3 个关系为 @ManyToMany 的表。所以我有 2 个重要的表和一个用于映射的表。

我创建了一个名为实体、关键字的类(如果你愿意,我可以显示我的类)(我知道命名不正确,但这不是我的项目,我只做优化)。

我使用休眠版本 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: missing expression

当我将此查询复制到 OracleDevepoler 时,他不喜欢这个表达式“ and .=. ”。没有该查询执行正确。

我究竟做错了什么 ?

4

2 回答 2

1

也许您在查询中使用了错误的连接?从上下文中我得出结论,您应该使用类似的东西:

"SELECT DISTINCT r FROM Rules r inner join r.entities e " +
                "  WHERE e IN :entities ";
于 2014-04-14T11:25:40.120 回答
0

我认为正确的查询可能是

select distinct e.rules from Entities where e.entityId in :entities

这是如果关键字是您的连接表并且您在实体中有一组规则

如果不是,请您显示映射,它可能会有所帮助。

于 2014-04-14T11:25:12.587 回答