[英]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
。
您需要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.