2010-12-01 21 views
3

我有幾個驗證我的實體,如@NotNull,有的代,像驗證不會對EntityManager.merge工作()

@Id 
@GeneratedValue(strategy = AUTO) 
@Column(name = "ID") 
private Long id; 

@Column 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Long referenceNumber; 

但是調用EntityManager.merge()時不會產生這個值。帶有@NotNull註釋的空字段在沒有任何抱怨的情況下通過。即使沒有生成id

我應該以某種方式切換這一代嗎?如何以及在哪裏?

+0

您抱怨了兩種行爲。一個是`id-generation`,另一個是merge()`上的bean-validation。 @axtavt回答關於前者,@kraftan回答關於後者。我投票贊成@ kraftan's。 – 2013-01-31 06:15:13

回答

1

除了kraftan的回答是:

  • 通過JPA默認的自動Bean驗證2.0作品如果驗證提供者是「存在於環境中」,否則它靜靜地不工作。您可以以產生錯誤添加

    <validation-mode>CALLBACK</validation-mode> 
    

    persistence.xml如果找不到驗證提供商。

  • JPA不支持生成任意(非id)屬性。一些JPA提供商可能有extensions
6

Merge()默認情況下不會調用pre-insert/pre-update事件偵聽器。 flush()merge()應該這樣做。

+0

我可以證實這一點。謝謝。此功能是否指定? – 2013-01-31 06:09:38