web-dev-qa-db-ja.com

HibernateException:デフォルトのBeanValidationファクトリを取得できません

私はhibernateHibernateを使用しています-バージョン:3.2.5.ga。これに加えて、gwt2.3バージョンを使用しています。 hibernateバージョンをアップグレードしようとすると、エラーが発生します。hibernate3.6.7の最終バージョンをダウンロードして、古いjarファイルに置き換えました。しかし、最初のサーバーヒットでアプリケーションを実行すると、以下のエラーが発生します。新しいバージョンを置き換えると、古いjarを含むjarの場合、問題はありません...しかし、新しいjarの場合はエラーが発生します。助けてください。よろしくお願いします。

org.hibernate.HibernateException: Unable to get the default Bean Validation factory
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.Java:127)
at org.hibernate.cfg.Configuration.applyBeanValidationConstraintsOnDDL(Configuration.Java:1704)
at org.hibernate.cfg.Configuration.applyConstraintsToDDL(Configuration.Java:1654)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.Java:1445)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1856)
at com.nextenders.facadeimplementation.hibernate.util.HibernateFactory.configureSessionFactory(HibernateFactory.Java:107)
at com.nextenders.facadeimplementation.hibernate.util.HibernateFactory.buildIfNeeded(HibernateFactory.Java:42)
at com.nextenders.facadeimplementation.model.dao.AbstractDao.<init>(AbstractDao.Java:20)
at com.nextenders.facadeimplementation.model.dao.UserDetailsDao.<init>(UserDetailsDao.Java:24)
at com.nextenders.facadeimplementation.facade.UserFacade.doLogin(UserFacade.Java:753)
at com.nextenders.facadeimplementation.facade.UserFacade.workflowMethodCaller(UserFacade.Java:822)
at com.nextenders.server.guice.actions.handlers.LoginCallerActionHandler.execute(LoginCallerActionHandler.Java:61)
at com.nextenders.server.guice.actions.handlers.LoginCallerActionHandler.execute(LoginCallerActionHandler.Java:1)
at com.gwtplatform.dispatch.server.AbstractDispatchImpl.doExecute(AbstractDispatchImpl.Java:153)
at com.gwtplatform.dispatch.server.AbstractDispatchImpl.execute(AbstractDispatchImpl.Java:111)
at com.gwtplatform.dispatch.server.AbstractDispatchServiceImpl.execute(AbstractDispatchServiceImpl.Java:80)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:601)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.Java:569)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.Java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.Java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.Java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.Java:263)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.Java:178)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.Java:91)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.Java:62)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.Java:118)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.Java:113)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.Java:1088)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.Java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.Java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.Java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.Java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.Java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.Java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.Java:152)
at org.mortbay.jetty.Server.handle(Server.Java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.Java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.Java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.Java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.Java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.Java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.Java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.Java:488)
12
Sanjay Jain

デフォルトでは、Hibernateバリデーターはautoに設定されています。つまり、クラスパスにバリデーターがある場合、それを使用しようとします。 GWT 2.3以降のバージョンでは、gwt-servlet.jar内に検証APIが含まれているため、Hibernateは最終的に部分検証ツールになり、失敗します。 Hibernate Validationを使用したくない場合は、プロパティ(hibernate.cfg.xml、hibernate.properties、またはプログラムで)でオフにするだけです。

javax.persistence.validation.modenoneに設定するだけです

10

デフォルトでは、Hibernateのバリデーターはtrueに設定されています。つまり、クラスパスにバリデーターがある場合、それを使用しようとします。 GWT 2.3以降のバージョンでは、gwt-servlet.jar内に検証APIが含まれているため、Hibernateは最終的に部分検証ツールになり、失敗します。 Hibernate Validationを使用したくない場合は、プロパティ(hibernate.cfg.xml、hibernate.properties、またはプログラムで)でオフにするだけです。

例:hibernate.cfg.xmlで、hibernate検証モードをnoneに追加します

<property name="javax.persistence.validation.mode">none</property>
5

Hibernate-validator-4.0.2.GA.jarとvalidation-api-1.0.0.GA.jarの両方を削除してみてください

1
Bill Comer

同じ問題が発生していましたが、以下の依存関係を追加すると、正常に機能しました。

        <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>4.2.0.Final</version>
        </dependency>

ただし、正しいバージョンを使用してください。 5.1.3.Finalを使用すると、失敗し続けましたが、バージョンを4.2.0.Finalに変更すると、機能しました。

1

2つのオプションがあります:

1.-Hibernate検証を無効にすることができます:

setProperty("javax.persistence.validation.mode", "NONE");

2.-これらの依存関係を追加します。mavenを使用しない場合は、jarをダウンロードして、アーティファクトに手動で追加します。

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>2.2.4</version>
        <scope>provided</scope> <!-- No required in JBoss but for test -->
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.4</version>
        <scope>provided</scope> <!-- No required in JBoss but for test -->
    </dependency>
0
Alexis Gamarra

ここでの回答はMavenに役立ちます。 Gradleを使用していますが、追加するだけでよいことがわかりました。

compile group: 'org.hibernate', name: 'hibernate-validator', version: '4.2.0.Final'

そして、エラーは消え、私のアプリは正しく機能しました。他の回答で述べたように、javax検証jarを除外したり、永続性検証モードを変更したりする必要はありませんでした。

0
Jason D