本人最近搭建一个框架,Spring2.5+JPA(Hibernate3.3)+MySql5 在所有jar包,配置文件都配置好之后,无法将实体类持久化至数据库,经过一番搜索,将问题定位在事务上面,可是事务我已经都配置好了,不知道哪里配置有问题,请各位专家帮忙spring-config-jpa.xml 文件<bean id = "dataSource" lazy-init="true"
  class =  "org.apache.commons.dbcp.BasicDataSource"
  p:driverClassName="com.mysql.jdbc.Driver"
  p:url="jdbc:mysql://localhost:3306/ycf?useUnicode=true&amp;characterEncoding=GBK"
  p:username="root"
  p:password=""
  p:maxActive="5"
  p:minIdle="1"/>

  <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
  
  <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
   <property name="showSql" value="true"></property>
  <property name="generateDdl" value="true"></property>
  <property name="database">
  <util:constant static-field="org.springframework.orm.jpa.vendor.Database.MYSQL"/>
  </property>
  </bean>
  
  <!-- JPA primary EntityManagerFactory -->
  <bean id="entityManagerFactory" lazy-init="true"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
          p:persistenceUnitName="ycf"
          p:jpaVendorAdapter-ref="jpaVendorAdapter"
          p:jpaDialect-ref="jpaDialect"
          p:dataSource-ref="dataSource"/>
          
  
  <bean id="transactionManager"  class="org.springframework.orm.jpa.JpaTransactionManager"
  p:entityManagerFactory-ref="entityManagerFactory"/>
  <tx:annotation-driven mode="aspectj" />spring-config-mvc.xml 文件<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="0">
<property name="interceptors">
<list>
<bean class="org.springframework.web.servlet.mvc.WebContentInterceptor" p:cacheSeconds="0" />
</list>
</property>
</bean>

<context:component-scan base-package="com.sundancer.core.web.controller" />
<context:component-scan base-package="com.sundancer.core.service" />
<context:component-scan base-package="com.sundancer.core.dao" /> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
@Repository
@Transactional
public class UserDAO extends JPABaseDAO{
protected transient final Logger logger = Logger.getLogger(getClass());
// property constants
public static final String PASSWORD = "password";
public static final String USERNAME = "username";
@PersistenceContext
private EntityManager em;         @Transactional
public void save(User entity) {
logger.info("saving User instance");
try {
System.out.println(entity.getUsername());
this.getJpaTemplate().persist(entity);
logger.info("save successful");
} catch (RuntimeException re) {
logger.error("save failed", re);
re.printStackTrace();
throw re;
}
}persistence.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_1_0.xsd" version="1.0">  
    <persistence-unit name="ycf" transaction-type="RESOURCE_LOCAL">
    </persistence-unit>   
</persistence> 

解决方案 »

  1.   

    jpa我还真就没用过,所以很遗憾帮不了楼主了!
      

  2.   

    Spring要求你包含事务处理类定义为sessionbean,只有spring识别的sessionbean才有spring的事务支持。一般是把需要事务的业务逻辑类定义为sessionbean,调用的方式是NewPaymentSessionBean newPaymentSessionBean = (NewPaymentSessionBean) Context.getBean(NewPaymentSessionBean.BEAN_NAME);看看spring手册的IOC部分,配置文件缺省是web.xml(可能会不同)