2010-04-01 33 views
3

Hibernate似乎不會在我標記爲naturalID的字段上生成一個notnull約束。這是正常的嗎?Hibernate naturalID

@MappedSuperclass 
public class AbstractDomainObject extends PersistentObject { 

@NaturalId 
private String code; 

DB模式:約束SYS_CT_47 UNIQUE(CODE) 沒有NOT NULL約束在這裏。

回答

3

結帳從Hibernate的參考手冊以下摘錄:

自然鍵是一個屬性或屬性的組合是獨特的,非空。它也是不變的。將自然鍵的屬性映射爲@NaturalId,或將它們映射到< natural-id >元素中。 Hibernate將生成必要的唯一鍵和可空性約束,因此,您的映射將更加自我記錄。

還要注意,在默認情況下,自然標識屬性被假定爲不可變的(常量)可以通過指定@NaturalId (mutable = true)

+0

但是,如果「Hibernate會生成必須的唯一鍵值和非空約束」,它改變默認在提供的示例中沒有顯示,這意味着,這不是正常的行爲。那麼「是」是什麼意思? – 2011-03-14 12:19:45

+0

你說得對。我的「是」令人困惑......就像Hibernate的文檔:)我從前面的答案中刪除了它。如何添加像@Column(name =「Code」,nullable = false,unique = true)的註釋呢? – Ori 2011-03-14 14:39:06

+0

這與xml映射自然id不一致。 xml映射natural-id確實會生成非空的約束。 – 2011-03-25 14:46:29