2012-02-16 102 views
1

关于我的文章/问题"EntityManager is always NULL using SpringFramework"
我遇到对我的代码这部分的下方例外遇到:BeanCreationException在使用Spring + Hibernate的/ EntityManager的

ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tblFileinfoHome': Injection of persistence fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

下面是文件与我的Spring + Hibernate的项目

< --- persistence.xml中--->

<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_1_0.xsd" 
version="1.0"> 
    <persistence-unit name="msh" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.msh.TblFileinfo</class> 
    </persistence-unit> 
</persistence> 

< --- ---的applicationContext.xml>

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:lang="http://www.springframework.org/schema/lang" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.springframework.org/schema/lang 
      http://www.springframework.org/schema/lang/spring-lang-3.0.xsd 
      http://www.springframework.org/schema/security"> 

    <!-- need to create database.properties file --> 
    <context:property-placeholder location="classpath:database.properties"/> 

    <context:component-scan base-package="com.msh"/> 

    <!-- tell Spring that it should act on any @PersistenceContext and @Transactional annotations found in bean classes --> 
    <!-- <tx:annotation-driven/> --> 
    <tx:annotation-driven transaction-manager="transactionManager"/> 

    <bean class="com.msh.TblFileinfoHome" /> 
    <bean class="com.msh.TblFileinfo" /> 
    <bean id="sample" class="com.msh.Sample" /> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
     <!-- <property name="databasePlatform" value="${platform}" /> --> 
     <property name="showSql" value="${database.showSql}" /> 
     <property name="generateDdl" value="${database.generateDdl}" /> 
    </bean> 

    <bean id="entityManagerFactory" class="org.org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="msh" /> 
     <property name="dataSource" ref="dataSource" /> 
     <!-- <property name="loadTimeWeaver" class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> --> 
     <property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${database.driverClassName}" /> 
     <property name="url" value="${database.url}" /> 
     <property name="username" value="${database.username}" /> 
     <property name="password" value="${database.password}" /> 
    </bean> 
</beans> 

< ---主要的Java代码--->

package com.msh; 

public class MavenSpringHibernate { 

    /** 
    * @param args 
    */ 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    Sample s = (Sample)appContext.getBean("sample"); 
    s.persist();ew Sample(); 
     s.persist(); 
    } 
} 

< --- --- DAO>

package com.msh; 

import javax.ejb.Stateless; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.EntityManager; 
import javax.persistence.Persistence; 
import javax.persistence.PersistenceUnit; 
import javax.persistence.PersistenceContext; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

/** 
* Home object for domain model class TblFileinfo. 
* @see com.trendmicro.grid.mshPackage.TblFileinfo 
* @author Hibernate Tools 
*/ 

/** 
@Stateless 
@Repository 
@Transactional 
*/ 

@Repository 
public class TblFileinfoHome { 

    private static final Log log = LogFactory.getLog(TblFileinfoHome.class); 

    @PersistenceContext(unitName="msh") 
    private EntityManager entityManager; 

    @Transactional 
    public void persist(TblFileinfo transientInstance) { 
     log.debug("persisting TblFileinfo instance"); 
     try { 
      entityManager.persist(transientInstance); 
      log.debug("persist successful"); 
     } 
     catch (RuntimeException re) { 
      log.error("persist failed", re); 
      throw re; 
     } 
    } 

    @Transactional 
    public void remove(TblFileinfo persistentInstance) { 
     log.debug("removing TblFileinfo instance"); 
     try { 
      entityManager.remove(persistentInstance); 
      log.debug("remove successful"); 
     } 
     catch (RuntimeException re) { 
      log.error("remove failed", re); 
      throw re; 
     } 
    } 

    @Transactional 
    public TblFileinfo merge(TblFileinfo detachedInstance) { 
     log.debug("merging TblFileinfo instance"); 
     try { 
      TblFileinfo result = entityManager.merge(detachedInstance); 
      log.debug("merge successful"); 
      return result; 
     } 
     catch (RuntimeException re) { 
      log.error("merge failed", re); 
      throw re; 
     } 
    } 

    @Transactional 
    public TblFileinfo findById(Long id) { 
     log.debug("getting TblFileinfo instance with id: " + id); 
     try { 
      TblFileinfo instance = entityManager.find(TblFileinfo.class, id); 
      log.debug("get successful"); 
      return instance; 
     } 
     catch (RuntimeException re) { 
      log.error("get failed", re); 
      throw re; 
     } 
    } 
} 

--- Entity ---

package com.msh; 


import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 

import static javax.persistence.GenerationType.IDENTITY; 
import javax.persistence.Id; 
import javax.persistence.Table; 

/** 
* TblFileinfo generated by hbm2java 
*/ 
@Entity 
@Table(name="tbl_fileinfo" 
    ,catalog="behavior" 
) 
public class TblFileinfo implements java.io.Serializable { 


    private Long fileId; 
    private String filename; 
    private String filetype; 

    public TblFileinfo() { 
    } 

    public TblFileinfo(String filename, String filetype) { 
     this.filename = filename; 
     this.filetype = filetype; 
    } 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 


    @Column(name="file_id", unique=true, nullable=false) 
    public Long getFileId() { 
     return this.fileId; 
    } 

    public void setFileId(Long fileId) { 
     this.fileId = fileId; 
    } 


    @Column(name="filename", length=200) 
    public String getFilename() { 
     return this.filename; 
    } 

    public void setFilename(String filename) { 
     this.filename = filename; 
    } 


    @Column(name="filetype", length=50) 
    public String getFiletype() { 
     return this.filetype; 
    } 

    public void setFiletype(String filetype) { 
     this.filetype = filetype; 
    } 
} 

< --- Sample类控制器--->

package com.msh; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.transaction.annotation.Transactional; 
import com.trendmicro.grid.msh.TblFileinfo; 
import com.trendmicro.grid.msh.TblFileinfoHome; 


@Transactional 
public class Sample { 
    private TblFileinfo tinfo; 
    @Autowired 
    private TblFileinfoHome tinfoh; 

    public Sample() 
    { 
     tinfo = new TblFileinfo("c:/jayson/murillo/pryde.exe", "uv_win32"); 
     //tinfoh = new TblFileinfoHome(); 
    } 

    public void persist() 
    { 
     tinfoh.persist(tinfo); 
    } 
} 
+0

它看起来像一个classpath问题:Spring 3.0中不存在'org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()'方法。你确定你所有的Spring罐子都来自同一个Spring版本吗? – 2012-02-16 13:04:29

回答

2

似乎是一个库的版本不匹配,这就是为什么你得到AbstractMethodError当春乃发生调用SpringPersistenceUnitInfo看到这个question

+0

非常感谢你yazan :) – jaysonpryde 2012-02-17 01:24:52

相关问题