代码之家  ›  专栏  ›  技术社区  ›  sergionni

为bean配置休眠验证

  •  2
  • sergionni  · 技术社区  · 14 年前

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

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

    根据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>
    

    问题是如何 连接我的豆子 验证配置,如上所述。

    更新:

    实体类

    ...
    @Entity
    @NamedQuery(name = "isValutaKursExists", query = "SELECT id FROM CurrencyRate WHERE bankId = :bankNum")
    @Table(name = "Currency")
    public class Currency {
    ...
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Community Egal    7 年前

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

    您需要使用bean验证API中的注释对bean进行注释以添加 constraints 喜欢 @NotNull , @Size ( built-in )或者定义你自己。但是bean验证并不是真正的目的 根据SQL查询结果进行验证 .

    顺便问一下,你提到过 @NamedQuery 所以我猜你在使用Hibernate EntityManager。在这种情况下,我建议将bean验证与JPA集成(而不是Hibernate)。如果您使用的是JPA2.0,只需将bean验证实现放在类路径上即可。如果您使用的是JPA1.0,请参阅 this previous answer .

        2
  •  3
  •   Hardy    14 年前

    是的,正确的方法是自定义约束,比如 有效货币 和一个匹配 validcurrencyvalidator . 您需要访问休眠会话resp。ConstraintValidator实现中的EntityManager。你可以在Hibernate wiki上找到一些关于如何做到这一点的想法。- Accessing the Hibernate Session within a ConstraintValidator