2011-08-25 161 views
0

我想使用Hibernate 3.6,但我不能將其配置正確 隨着我的Maven配置配置Hibernate 3.6依賴

<hibernate.version>3.6.6.Final</hibernate.version> 

    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.persistence</groupId> 
     <artifactId>persistence-api</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.6</version> 
    </dependency> 

我得到

javax.servlet.ServletException: Servlet.init() for servlet springapp threw exception 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) 
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:284) 
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:322) 
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1699) 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
java.lang.Thread.run(Thread.java:662) 
.... 

java.lang.NoClassDefFoundError: org/hibernate/MappingException 
java.lang.Class.getDeclaredConstructors0(Native Method) 
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
java.lang.Class.getDeclaredConstructors(Class.java:1836) 
... 
java.lang.ClassNotFoundException: org.hibernate.MappingException 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
java.lang.Class.getDeclaredConstructors0(Native Method) 
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
java.lang.Class.getDeclaredConstructors(Class.java:1836) 
    ... 

spring 3.0.5.RELEASE一起使用它,如果它很重要。我錯過了什麼?

UPD 我加了彈簧的ORM我的依賴,但它diddn't幫助 異常拋出,當我嘗試注入的EntityManager直接 私人的EntityManager EntityManager的;

@PersistenceContext 
public void setEntityManager(EntityManager entityManager) { 
    this.entityManager = entityManager; 
} 

或當我嘗試使用Spring Data項目Repository。 我的配置

<!-- Instructs Spring to perfrom declarative transaction managemenet on annotated classes --> 
<tx:annotation-driven transaction-manager="transactionManager"/> 

<!-- Drives transactions using local JPA APIs --> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="rollbackOnCommitFailure" value="true"/> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/> 
    </property> 
</bean> 

<!-- Creates a EntityManagerFactory for use with the Hibernate JPA provider and a simple in-memory data source populated with test data --> 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="persistenceUnitName" value="reportsPersistence"/> 
    <property name="jpaVendorAdapter" ref="jpaVendor"/> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/> 
    </property> 
</bean> 

<bean id="jpaVendor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="database" value="MYSQL"/> 
</bean> 

<!-- DataSource configuration --> 
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    <property name="driverClass" value="com.mysql.jdbc.Driver"/> 
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/someProj?autoReconnect=true"/> 
    <property name="user" value="someUser"/> 
    <property name="password" value="somePass"/> 
    <property name="autoCommitOnClose" value="false"/> 
    <property name="minPoolSize" value="5"/> 
    <property name="numHelperThreads" value="20"/> 
    <property name="initialPoolSize" value="25"/> 
    <property name="maxPoolSize" value="250"/> 
    <property name="breakAfterAcquireFailure" value="true"/> 
    <property name="acquireRetryDelay" value="20"/> 
    <property name="maxIdleTimeExcessConnections" value="600"/> 
    <property name="maxIdleTime" value="600"/> 
</bean> 

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.domain.User</value> 
     </list> 
    </property> 
</bean> 

的persistence.xml

<persistence-unit name="reportsPersistence" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
     <property name="hibernate.show_sql" value="true"/> 
    </properties> 
</persistence-unit> 

User是一個簡單的JPA實體

@Entity 
@Table(name = "USERS") 
public class User { 
    private long id = -1; 
    private String name; 

    public User() { 
    } 

    public User(String name) { 
     this.name = name; 
    } 

    @Id 
    @GeneratedValue() 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     User user = (User) o; 

     if (id != user.id) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     return (int) (id^(id >>> 32)); 
    } 
} 
+0

您是否還將spring-orm.jar作爲依賴項? – blong824

+0

@ blong824不,我添加它,但沒有幫助。提供的其他信息。 –

回答

3

你不說你正在運行什麼,或者你在做什麼來得到這個錯誤。 MappingException comes from hibernate-core,所以你的依賴不是問題。然而,無論你運行的是不正確的使用Maven類路徑。

+0

你對那裏的建築工具有錯誤 –

+0

@Stas Kurilin,請你詳細說明錯誤嗎? –

+0

@Msaleh不幸的是,我不能。如果您使用的是IDE,請嘗試使用乾淨的運行或者從pom重新創建項目。 –

1

我用JPA註解冬眠,我只需要使用:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>3.6.6.Final</version> 
</dependency> 

不需要輸入hibernate-jpa-2.0-apipersistence-api。如果您使用的是EntityManager,請保留hibernate-entitymanager

我也有一個條目:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-orm</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 
-1
 <properties> 
    <spring.version>4.0.3.RELEASE</spring.version> 
      <spring-ws.version>2.1.4.RELEASE</spring-ws.version> 
      <springbatch-core.version>2.1.9.RELEASE</springbatch-core.version> 
      <spring-security.version>3.1.4.RELEASE</spring-security.version> 
      <hibernate-core.version>4.2.4.Final</hibernate-core.version> 

      <jsp-api.version>2.1</jsp-api.version> 

      <ojdbc6.version>11.2.0.3</ojdbc6.version> 
      <persistence-api.version>1.0</persistence-api.version> 
      <apache-commons.version>3.1</apache-commons.version> 

      </properties> 
    <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-core</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-context</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-jdbc</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-jms</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-orm</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-beans</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-oxm</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework.security</groupId> 
         <artifactId>spring-security-config</artifactId> 
         <version>${spring-security.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework.security</groupId> 
         <artifactId>spring-security-core</artifactId> 
         <version>${spring-security.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework.security</groupId> 
         <artifactId>spring-security-web</artifactId> 
         <version>${spring-security.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-expression</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-context-support</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework.batch</groupId> 
         <artifactId>spring-batch-core</artifactId> 
         <version>${springbatch-core.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework.batch</groupId> 
         <artifactId>spring-batch-infrastructure</artifactId> 
         <version>${springbatch-core.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-tx</artifactId> 
         <version>${spring.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.hibernate</groupId> 
         <artifactId>hibernate-core</artifactId> 
         <version>${hibernate-core.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.hibernate</groupId> 
         <artifactId>hibernate-ehcache</artifactId> 
         <version>${hibernate-core.version}</version> 
        </dependency> 
    <dependency> 
        <groupId>javax.servlet.jsp</groupId> 
        <artifactId>jsp-api</artifactId> 
        <version>${jsp-api.version}</version> 
       </dependency> 
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-web</artifactId> 
        <version>${spring.version}</version> 
       </dependency><dependency> 
        <groupId>com.oracle</groupId> 
        <artifactId>ojdbc6</artifactId> 
        <version>${ojdbc6.version}</version> 
       </dependency> 
    <dependency> 
        <groupId>javax.persistence</groupId> 
        <artifactId>persistence-api</artifactId> 
        <version>${persistence-api.version}</version> 
       </dependency> 
    <dependency> 
        <groupId>org.apache.commons</groupId> 
        <artifactId>commons-lang3</artifactId> 
        <version>${apache-commons.version}</version> 
       </dependency> 

Add Above Dependency and also add below transaction manager configuration in dao xml: 

    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
     p:sessionFactory-ref="sessionFactory"> 
     <property name="globalRollbackOnParticipationFailure" value="false" /> 
    </bean> 

    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean "> 
     <property name="dataSource" ref="dataSource" /> 

     <property name="annotatedClasses"> 
      <list> 
      <value>com.abc.data.MyClass</value> 
      </list> 
     </property> 

     <tx:annotation-driven /> 

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="java:/jdbc/ExampleDS" /> 
     <property name="lookupOnStartup" value="true" /> 
     <property name="cache" value="true" /> 
     <property name="proxyInterface" value="javax.sql.DataSource" /> 
    </bean> 
+0

你可以格式化和縮進你的答案,並添加一個解釋? – i3arnon