我正在使用Hibernate 3.6和MSSQL 2012。
执行此HQL时
select tbl.state from Property tbl where tbl.state = 1 and tbl.entity.state = 1 and tbl.entity.className = 'com....' and tbl.fieldName = 'fieldName'
我正在获取此SQL
select property0_.State as col_0_0_ from Properties property0_ cross join Entities entity1_ where property0_.refEntityid=entity1_.id and property0_.State=1 and entity1_.State=1 and entity1_.ClassName='com....' and property0_.FieldName='fieldName'
请注意 交叉连接 和where子句中的 附加条件* 。
根据Hibernate docs https://docs.jboss.org/hibernate/core/3.5/reference/en/html/queryhql.html#queryhql- joins- forms
隐式连接应该生成为 内部连接 。
我注意到有一个打开的错误https://hibernate.atlassian.net/browse/HHH-7707,可能是指此问题,但没有人回答,并且已经开放了一年。
我将不胜感激有关此问题的任何信息。谢谢。
PS。我很清楚,使用隐式联接不是编写HQL的正确方法,但是我现在对此无能为力。
您的联接是内部联接,但是使用的旧语法包括在where子句中添加条件:
where property0_.refEntityid=entity1_.id
而不是用
inner join Entities entity1_ on property0_.refEntityid=entity1_.id
结果是完全一样的。
只要您了解它们的作用,在HQL中使用隐式联接根本不是问题。