Hibernate 使用“(+)”运算符代替 join 生成 Oracle 查询
Hibernate generating Oracle queries with "(+)" operator instead join
我必须对使用 Hibernate 5.0.9 和 Oracle 数据库的遗留项目进行一些改进。我注意到休眠正在生成这样的查询
select a.id, b.id
from a, b
where a.b_id = b.id(+)
而不是
select a.id, b.id
from a left join b on a.b_id = b.id
像这样的代码
Criteria criteria = session.createCriteria(A.class, "a");
criteria.createAlias("a.b", "b", JoinType.LEFT_OUTER_JOIN);
criteria = criteria.setProjection(
Projections.projectionList()
.add(Projections.property("a.id"))
.add(Projections.property("b.id"))
);
criteria.list();
至少对我来说,“(+)”读起来很复杂。
在具有相同 Hibernate 版本的其他项目中,“连接”正常生成。
这是休眠配置吗?
按照建议,在persistence.xml中添加方言信息解决了问题。
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect" />
我必须对使用 Hibernate 5.0.9 和 Oracle 数据库的遗留项目进行一些改进。我注意到休眠正在生成这样的查询
select a.id, b.id
from a, b
where a.b_id = b.id(+)
而不是
select a.id, b.id
from a left join b on a.b_id = b.id
像这样的代码
Criteria criteria = session.createCriteria(A.class, "a");
criteria.createAlias("a.b", "b", JoinType.LEFT_OUTER_JOIN);
criteria = criteria.setProjection(
Projections.projectionList()
.add(Projections.property("a.id"))
.add(Projections.property("b.id"))
);
criteria.list();
至少对我来说,“(+)”读起来很复杂。 在具有相同 Hibernate 版本的其他项目中,“连接”正常生成。
这是休眠配置吗?
按照建议,在persistence.xml中添加方言信息解决了问题。
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect" />