【问题标题】:Query handling for Null reference in HibernateHibernate 中 Null 引用的查询处理
【发布时间】:2012-01-19 07:41:14
【问题描述】:

我正在使用休眠,并且我有一个像

这样的实体
@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

当我尝试使用休眠查询获取此记录时

Select e.id,e.name,e.parent.name from MyEntity e where e.id =125

此查询返回零记录。因为这里的父级为空,所以有什么方法可以处理这种情况。 感谢您的建议。

【问题讨论】:

标签: java hibernate jpa


【解决方案1】:

在您的情况下,Hibernate 隐式使用内部联接,当其中一侧为 null 时不返回任何内容。

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

select e.id, e.name, p.name from MyEntity e left join e.parent p where e.id = 125

【讨论】:

    【解决方案2】:

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

    您可以将以下属性添加到您的休眠状态:

    hibernate.show_sql=true
    hibernate.format_sql=true
    

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

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

    如果有一天你需要方法参数,看看这个: Hibernate show real SQL

    您也可以使用 Criteria api,它非常简单且功能强大,在各个方向都没有连接时使用和维护。

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2021-06-27
      相关资源
      最近更新 更多