有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

此查询将返回零条记录。因为父级在这里是空的,所以有任何方法来处理这种情况。 谢谢你的帮助


共 (2) 个答案

  1. # 1 楼答案

    在您的例子中,Hibernate隐式地使用内部联接,当其中一个边为null时,该联接不返回任何内容

    您可以指示Hibernate使用左外部联接,如下所示:

    select e.id, e.name, p.name from MyEntity e left join e.parent p where e.id = 125
    
  2. # 2 楼答案

    正如其他人所说,这会导致内部连接

    您可以将以下属性添加到hibernate:

    hibernate.show_sql=true
    hibernate.format_sql=true
    

    这样,您就可以知道hibernate正在尝试做什么,并自己注意到这些问题

    如果生成的SQL没有给您预期的结果,那么您的hibernate请求有问题。 在这种情况下,不难理解,您必须告诉hibernate执行左外部连接而不是内部连接

    如果有一天您需要方法参数,请查看以下内容: Hibernate show real SQL

    您还可以使用CriteriaAPI,它非常简单,在各个方向都没有连接的情况下使用和维护都非常强大