Hibernate Bean Validation在类路径中不可用

Sim*_*erg 3 java hibernate classpath bean-validation

我今天决定试用Hibernate,看起来很有前途,虽然设置可能更容易.在找到第一百万左右配置错误的解决方案后,我现在坚持使用这个:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: manager1] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
(...)
Caused by: org.hibernate.HibernateException: Bean Validation not available in the class path but required in javax.persistence.validation.mode
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.applyHibernateListeners(BeanValidationIntegrator.java:281)
    at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:134)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:303)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    ... 5 more
Run Code Online (Sandbox Code Playgroud)

Peristence.xml:

<?xml version='1.0' encoding='utf-8' ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
   <persistence-unit name="manager1" transaction-type="JTA">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <class>net.zomis.hibernate.Game</class>
      <class>net.zomis.hibernate.TestFields</class>
      <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
      <validation-mode>CALLBACK</validation-mode>
      <properties>
          <property name="javax.persistence.validation.mode" value="NONE" />  
         <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="validate"/>
      </properties>
   </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

(据我所知)相关部分 hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        (...)
        <property name="hbm2ddl.auto" >validate</property>
        <mapping class="net.zomis.hibernate.Game" />
        <mapping class="net.zomis.hibernate.TestFields" />
    </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

我曾尝试加入这个没有任何变化到构建路径.我google了Bean Validation not available in the class path but required in javax.persistence.validation.mode,也只是Bean Validation not available in the class path.我找到了源代码,但这对我没什么帮助.

我也尝试从xml配置文件中删除属性,没有任何运气.

使用Maven.我只是使用Eclipse并直接从Eclipse构建和运行项目.

显而易见的问题是:我该如何解决这个问题?在我错过的构建路径中是否需要额外的jar?(在那种情况下哪一个?)以及:为什么需要它?我可以改变一些东西,以便不再需要吗?

dde*_*ele 7

您需要在类路径中使用validation-api(您可以使用的下载JAR链接,因为您不使用maven).

Hibernate在类路径中搜索javax.validation.Validation类.如果它没有找到它会抛出Bean Validation not available in the class path but required in javax.persistence.validation.mode错误.

  • 如果你不使用maven,你需要自己构建classpath并且很容易错过jar.使用maven来引导您的项目并确保您拥有所有的罐子可能是值得的.
  • 如果您正在使用maven,则验证-api将作为hibernate-validator的传递依赖项引入.

  • 我必须说Maven比Hibernate更容易设置和使用.另外,关于Maven被证明是错误的我的照片 - 现在我知道它是什么,我喜欢它.对于想要开始使用Maven并使用Eclipse的其他人,请使用更新站点`http:// download.eclipse.org/technology/m2e/releases`,您就完成了! (2认同)