【问题标题】:Validation doesn't work on EntityManager.merge()验证不适用于 EntityManager.merge()
【发布时间】:2011-05-18 13:59:21
【问题描述】:

我的实体几乎没有验证,比如@NotNull,还有一些代,比如

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

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

但是,当调用EntityManager.merge() 时,不会生成此值。带有@NotNull 注释的空字段被传递,没有任何抱怨。连id都没有生成。

我应该以某种方式开启这一代吗?如何,在哪里?

【问题讨论】:

  • 您投诉了两种行为。一个是id-generation,另一个是bean-validation on merge()。 @axtavt 回答了前者,@kraftan 回答了后者。我投票支持@kraftan's。

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


【解决方案1】:

Merge() 默认情况下不调用预插入/预更新事件侦听器。 flush()merge() 之后应该这样做。

【讨论】:

  • 我可以确认这一点。谢谢。是否指定了此功能?
【解决方案2】:

除了克拉夫坦的回答:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2019-06-01
    • 2018-01-24
    相关资源
    最近更新 更多