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" />