簡體   English   中英

Hibernate Bean Validation在類路徑中不可用

[英]Hibernate Bean Validation not available in the class path

我今天決定試用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

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>

(據我所知) 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>

我曾嘗試加入這個沒有任何變化到構建路徑。 我已經搜索了Bean Validation not available in the class path but required in javax.persistence.validation.mode並且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? (在那種情況下哪一個?)還有:為什么需要它? 我可以改變一些東西,以便不再需要嗎?

您需要在類路徑中使用validation-api (您可以使用的下載JAR鏈接,因為您不使用maven)。

Hibernate在類路徑中搜索javax.validation.Validation類。 如果它沒有找到它,則拋出Bean Validation not available in the class path but required in javax.persistence.validation.mode錯誤中是Bean Validation not available in the class path but required in javax.persistence.validation.mode

  • 如果你不使用maven,你需要自己構建classpath並且很容易錯過jar。 使用maven來引導您的項目並確保您擁有所有的罐子可能是值得的。
  • 如果您正在使用maven,則驗證-api將作為hibernate-validator的傳遞依賴項引入。

您需要Hibernate Validator工件:

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

這還包括Bean Validation API,在這種情況下確實也是一個要求。

如果您沒有使用任何Bean Validation約束(例如@NotNull,@ Before,@ Pattern等),您也可以刪除

<validation-mode>CALLBACK</validation-mode>

或將其設置為NONE。 Hibernate使用不需要Bean驗證它只是JPA規范中定義的附加組件。 如果Bean驗證是基於類路徑生命周期的驗證(更新前的實體驗證,預先保留等),則會自動啟用(另請參閱http://docs.jboss.org/hibernate/stable/validator/reference/ en-US / html_single /#d0e3096 ,當然還有JPA 2規范)。

另一方面,如果您沒有在類路徑上進行Bean Validation,但是通過persistence.xml中的配置選項顯式請求它,則會得到您描述的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM