2010-12-01 67 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