验证不适用于EntityManager.merge()

时间:2010-12-01 15:37:42

标签: java validation jpa java-ee bean-validation

我对我的实体进行的验证很少,例如@NotNull和某些代,例如

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

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

但是,在调用EntityManager.merge()时,不会生成此值。带有@NotNull注释的空字段无需任何投诉即可通过。即使id也未生成。

我应该以某种方式切换这一代吗?怎么样,在哪里?

2 个答案:

答案 0 :(得分:6)

默认情况下,

Merge()不会调用pre-insert / pre-update事件侦听器。 flush()之后的merge()应该这样做。

答案 1 :(得分:1)

除了卡夫丹的回答:

  • 默认情况下,如果验证提供程序“存在于环境中”,JPA 2.0中的自动Bean验证将起作用,否则它将无法正常工作。你可以添加

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

    persistence.xml,以便在找不到验证提供程序时生成错误。

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