2013-03-24 53 views
2

我有下面的類映射一個MySQL表:註解Hibernate映射ID /長外鍵可空列

@Entity 
@Table(name = "category") 
public class Category { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "id") 
    private long id; 

    @Column(name = "parent_id") 
    private long parentId; 

,並與具有parent_id列的NULL值列打交道時,我得到以下錯誤:

INFO: HHH000327: Error performing load command : org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.blogspot.symfonyworld.wealthylaughingduck.model.Category.parentId

這僅僅是一個Java錯誤:NULL不能被分配給long類型(private long parentId)。我找不到任何提示如何解決這個問題,我只能想到用Long代替long。這是一個好主意,或者可能有一些內置的hibernate註釋或任何機制來做這些特定的東西?

回答

6

您將類屬性定義爲基元(long),但是您的數據庫表包含相應列的空值。提供者(Hibernate)不會將null映射到原語,因爲映射是不明確的。

如果您的數據可能包含空值,您需要使用相同的包裝類(本例中爲Long)。

@Entity 
@Table(name = "category") 
public class Category { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "id") 
    private long id; 

    @Column(name = "parent_id") 
    private Long parentId; 
} 
+0

好吧,所以這就是我想到的。我只是想知道是否有任何額外的註釋。 – ducin 2013-03-24 20:44:55

+1

@tkoomzaaskz - nope,不需要額外的註釋。建議(但不要求)用'@ Basic'註釋所有基本類型和包裝類型屬性。 – Perception 2013-03-24 20:53:52

1

如果parentId爲空,你需要把它映射爲一個行業,你就需要使用包裝類。

但是,如果(因爲我懷疑從提交的名稱)你明確地將外鍵映射爲字段,你可能錯過了mapping associations的一些ORM的真正實力。