2

取得エラー:

org.hibernate.HibernateException: Error applying BeanValidation relational constraints
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:219)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:126)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:301)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)


Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyRelationalConstraints(BeanValidationIntegrator.java:208)
... 207 more
Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:524)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:119)
    ... 212 more
Caused by: javax.validation.ValidationException: Unable to find a default provider
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:521)

Hibernate 関連の maven conf:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.5.SP1</version>
        <scope>compile</scope>
        <exclusions> 
            <exclusion>
                <groupId>dom4j</groupId>
                <artifactId>dom4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jtds</groupId>
        <artifactId>jtds</artifactId>
        <version>1.2.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.2.0.Final</version>
        <scope>compile</scope>
        <exclusions> 
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>4.3.1.Final</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.google.code.findbugs</groupId>
        <artifactId>jsr305</artifactId>
        <version>1.3.9</version>
        <scope>compile</scope>
    </dependency>

私が見つけた提案は次のとおりです。

  1. 休止状態を使用する 4+
  2. ユーザーの休止状態の検証 4+
  3. 休止状態の検証ライブラリを追加する
  4. jsr305 を追加します (imo はあまり重要ではありません)
  5. javax 検証ライブラリを追加する
  6. hibernate-validator-annotation-processor を追加

私はそれらすべてを持っていますが、まだエラーが発生しています。

編集:

休止状態をどのように使用しているかを示します。

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
        <property name="hibernate.connection.pool_size">5</property>
        <property name="show_sql">false</property>
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <property name="hibernate.current_session_context_class">thread</property>


        <mapping class="com.foo.bar.MyClass />
    </session-factory>
</hibernate-configuration>

建物:

private static SessionFactory buildSessionFactory() {

    try {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration configuration = new Configuration();
        configuration.configure();

        configuration.setNamingStrategy(ImprovedNamingStrategy.INSTANCE); // also other configuration changes made here

        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();

        return configuration.buildSessionFactory(serviceRegistry); // this line gives the error


    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        log.error("Initial SessionFactory creation failed.", ex);
        throw new ExceptionInInitializerError(ex);
    }
}
4

1 に答える 1

3

あなたの6つのポイントについて:

  • 休止状態を使用する 4+
  • ユーザーの休止状態の検証 4+

Hibernate Validator 4.x は、Bean Validation のリファレンス実装です。そして、それが使用するのに適したバージョンです。Hibernate 4に統合されているため、バージョンは正しいようです

  • 休止状態の検証ライブラリを追加する

はい、それは必須であり、hibernate-validator依存関係を追加することでそれを行います。

  • jsr305 を追加します (imo はあまり重要ではありません)

関係ない。それがどのJSRなのかさえわかりません。

  • javax 検証ライブラリを追加する

明示的に行いますが、これらはhibernate-validatorへの推移的な依存関係でもあるため、どちらの方法でも取得できます。

  • hibernate-validator-annotation-processor を追加

いいえ、必要ありません/関係ありません

では、なぜうまくいかないのでしょうか。この質問に答えるには、もっと情報が必要だと思います。この例外は、javax.validation.Validationが Hibernate Validator Bean Validation プロバイダーを参照/ロードできないことを示唆しています。制約のあるクラスロード環境で働いていますか? これらすべての依存関係をどのように使用しますか?

于 2013-03-17T14:11:51.447 に答える