使用Spring + Hibernate / EntityManager时遇到BeanCreationException

关于我的post/问题“使用SpringFramework , EntityManager总是为NULL” ,
我在这部分代码中遇到以下exception:

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

线程“main”中的exceptionorg.springframework.beans.factory.BeanCreationException:创建名为’tblFileinfoHome’的bean时出错:持久性字段的注入失败; 嵌套exception是org.springframework.beans.factory.BeanCreationException:创建在类路径资源[applicationContext.xml]中定义名称为’entityManagerFactory’的bean时出错:init方法的调用失败; 嵌套exception是java.lang.AbstractMethodError:org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax / persistence / ValidationMode;

以下是与我的Spring + Hibernate项目相关的文件

   org.hibernate.ejb.HibernatePersistence com.msh.TblFileinfo   

      <!--  -->       <!--  -->       <!--  -->             

 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(); } } 

 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; } } } 

– – 实体 – –

 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; } } 

 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); } } 

看起来像库版本不匹配,这就是为什么当spring调用SpringPersistenceUnitInfo时你得到AbstractMethodError看到这个问题