2011-12-13 102 views
0
處理的空引用

我使用休眠和我有一個實體像查詢在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 

一個記錄,當我試圖讓這個紀錄休眠查詢

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

此查詢返回零記錄。因爲父母在這裏是null,所以有什麼辦法來處理這種情況。 感謝advc。

+0

它沒有任何意義。你爲什麼認爲這是因爲父母爲空? – elias

+0

但我想要那條記錄。如果parent爲空,它應該返回e.parent.name null。 –

+0

'e.parent.name'導致內部連接失敗,因爲null。檢查了這一點:[http://stackoverflow.com/questions/601615/how-to-simulate-nvl-in-hql](http://stackoverflow.com/questions/601615/how-to-simulate-nvl-在-HQL) –

回答

5

在你的情況Hibernate隱式地使用內部連接,當其中一邊是null時不返回任何東西。

您可以指示休眠使用左外連接代替如下:

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

像其他人說,這導致了innerjoin ...

您可以添加以下屬性到您的休眠:

hibernate.show_sql=true 
hibernate.format_sql=true 

這樣你就可以知道什麼Hibernate是試圖做的,自己通知這些問題...

如果生成的SQL沒有給你預期的結果,那麼你的休眠請求有問題。 在這種情況下,不難理解,您必須讓hibernate執行左外連接而不是內連接。

如果有一天你需要方法的參數,看看這個: Hibernate show real SQL

你也可以使用了標準的API時,有在每一個方向上不加入,這是相當簡單等強大的使用和維護。