【问题标题】:Configure Hibernate validation for bean为 bean 配置 Hibernate 验证
【发布时间】:2010-05-14 15:04:34
【问题描述】:

我需要根据 SQL 查询结果进行验证。

查询被定义为注释 - 在我的实体 bean 中作为 @NamedQuery

根据 Hibernate 文档 (doc),有可能在以下操作中验证 bean:
更新前
预插入
预删除

看起来像:

<hibernate-configuration>
    <session-factory>
       ...
    <event type="pre-update">
       <listener class="org.hibernate.cfg.beanvalidation.BeanValidationEventListener"/>
    </event>
    <event type="pre-insert">
        <listener class="org.hibernate.cfg.beanvalidation.BeanValidationEventListener"/>
    </event>
    <event type="pre-delete">
        <listener class="org.hibernate.cfg.beanvalidation.BeanValidationEventListener"/>
    </event>
</hibernate-configuration>

问题是如何将我的 bean 与验证配置连接起来,如上所述。

更新:

实体类

...
@Entity
@NamedQuery(name = "isValutaKursExists", query = "SELECT id FROM CurrencyRate WHERE bankId = :bankNum")
@Table(name = "Currency")
public class Currency {
...

【问题讨论】:

    标签: hibernate validation configuration bean-validation


    【解决方案1】:

    问题是如何将我的 bean 与验证配置连接起来,如上所述。

    您需要使用 Bean Validation API 中的注解来注解您的 bean,以添加 constraints,例如 @NotNull@Size (built-in) 或定义您自己的注解。但是 Bean Validation 并不是真的要根据 SQL 查询结果进行验证

    顺便说一句,您提到了@NamedQuery,所以我猜您正在使用 Hibernate EntityManager。在这种情况下,我建议将 Bean Validation 与 JPA(而不是 Hibernate)集成。如果您使用的是 JPA 2.0,只需将 Bean Validation 实现放在类路径上。如果您使用的是 JPA 1.0,请参阅 this previous answer

    【讨论】:

    • 谢谢你的回答,帕斯卡。是的,应该对 SQL 结果进行验证。流程如下 - 如果查询结果不为空,则应执行该实体的交易。
    • @sergionni 不客气。但恐怕 Bean Validation 不是适合您的流程的工具。 AFAIK,Bean Validation 是用于 bean 验证,而不是查询结果验证。
    • 谢谢,帕斯卡,我已经更新了帖子(添加了实体类部分)。因此,可能的步骤是再开发一个类。像 CurrencyValidator 一样,我应该在其中实现 getNamedQuery("isValutaKursExists")?
    【解决方案2】:

    是的,正确的方法是自定义约束,如 ValidCurrency 和匹配的 ValidCurrencyValidator。您将需要访问您的休眠会话。 ConstraintValidator 实现中的 EntityManager。您可以在 Hibernate wiki - Accessing the Hibernate Session within a ConstraintValidator

    上获得有关如何执行此操作的一些想法

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 2013-06-04
      • 2012-09-15
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多