Hibernate中空引用的java查询处理
我正在使用hibernate,我有一个类似
@Entity
@Table(name = "MyEntity")
Class MyEntity {
@Id
@GeneratedValue
private long id;
@Column(name = "NAME")
private String name;
//some more attributes here
@OneToOne
@JoinColumn(name = "PARENT_ID")
MyEntity parent;
}
我在数据库中有一条记录
id | name | parent_id
125 | n1 | null
当我尝试使用hibernate查询获取此记录时
Select e.id,e.name,e.parent.name from MyEntity e where e.id =125
此查询将返回零条记录。因为父级在这里是空的,所以有任何方法来处理这种情况。 谢谢你的帮助
# 1 楼答案
在您的例子中,Hibernate隐式地使用内部联接,当其中一个边为
null
时,该联接不返回任何内容您可以指示Hibernate使用左外部联接,如下所示:
# 2 楼答案
正如其他人所说,这会导致内部连接
您可以将以下属性添加到hibernate:
这样,您就可以知道hibernate正在尝试做什么,并自己注意到这些问题
如果生成的SQL没有给您预期的结果,那么您的hibernate请求有问题。 在这种情况下,不难理解,您必须告诉hibernate执行左外部连接而不是内部连接
如果有一天您需要方法参数,请查看以下内容: Hibernate show real SQL
您还可以使用CriteriaAPI,它非常简单,在各个方向都没有连接的情况下使用和维护都非常强大