1)  spring-config.xml<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
       ">
<aop:aspectj-autoproxy /> <context:component-scan base-package="com.yjd">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan> <!-- 国际化的消息资源文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<!-- 在web环境中一定要定位到classpath 否则默认到当前web应用下找 -->
<value>classpath:messages</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds" value="60" />
</bean> <!-- tomcat jndi数据源配置 -->
<!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
<property name="jndiName" value="java:comp/env/jdbc/drp" /> </bean> <bean 
id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
<property name="dataSource" ref="dataSource" /> <property name="persistenceXmlLocation" 
value="classpath:META-INF/persistence.xml" /> <property name="loadTimeWeaver"> 
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" 
/> </property> </bean> -->
<!-- jpa -->
<!-- -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="yjdgisPersiste" />
</bean>
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect">
</bean> <bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor">
</bean> <tx:annotation-driven transaction-manager="txManager" /> <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="jpaDialect" ref="jpaDialect"></property>
</bean> <tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />

<tx:method name="addOrUpdate*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />

<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />

<tx:method name="find*" read-only="true" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice></beans>2)持久化文件 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="yjdgisPersiste" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
 <class>com.yjd.sys.entitys.Diccomm</class>  

<properties>

<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />

<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" />
<property name="hibernate.connection.username" value="ltusernew" />
<property name="hibernate.connection.password" value="kmyjd" />
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@192.168.202.215:1521:gtjynew2" />

<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />

</properties>

</persistence-unit>
</persistence>3)
--业务逻辑
package com.yjd.sys.services.impl;import java.util.List;import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;import com.yjd.core.paging.Page;
import com.yjd.jpa.BaseDAO;
import com.yjd.sys.entitys.Diccomm;
import com.yjd.sys.services.IDicFacade;@Service("dicFacade")
public class DicFacade extends BaseDAO<Diccomm> implements IDicFacade { public DicFacade() {
}// @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public Diccomm findById(long id) {
return super.find(id);
} public void removeById(long id) {
super.delete(id);
} public void removeByClause(String clause) { } @Override
// @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public List<Diccomm> findByClasuse(String clause) {
return super.findByClause(clause);
} @Override
// @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public List<Diccomm> findPageByClasuse(String clause, Page page) {
int _allRow = super.getCount(clause);
page.init(_allRow, page.getCurrentPage(),
page.getPageSize() > 0 ? page.getPageSize() : Page.PAGE_SIZE);
return super.findPageByClasuse(page, clause);
} @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void addOrUpdateDiccomm(Diccomm obj) {
// if (obj.getDicid() != null && obj.getDicid() > 0) {
// em.merge(obj);
// }
super.save(obj);
// em.flush();
// em.clear();
} @Override
// @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public Diccomm findOneByClasuse(String clause) {
return super.findOneByClause(clause);
}}
4) 测试代码package com.yjd.test;import java.util.LinkedHashMap;
import java.util.List;
import java.util.Random;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.yjd.sys.entitys.Diccomm;
import com.yjd.sys.services.IDicFacade;
public class MyTest {

@Test
public void addDiccom(){
ApplicationContext cxt = new ClassPathXmlApplicationContext("spring-config.xml");
Object obj = cxt.getBean("dicFacade");
IDicFacade dicFacade = (IDicFacade)obj ;
// Diccomm d = dicFacade.findById(215);
// d.setDictype2("e");
// dicFacade.addOrUpdateDiccomm(d);
// dicFacade.removeById(216L);
//dicFacade.removeById(225L);
Diccomm dicc = new Diccomm();
dicc.setDictype("TTa");

dicc.setDickeyname("1");
// dicFacade.addOrUpdateDiccomm(dicc);
Diccomm dic2 = new Diccomm();
dic2 = dicFacade.findById(226L);
// dic2.setDicid(226L);
dic2.setDickeyname("newN");
dic2.setDisplay("0");
dicFacade.addOrUpdateDiccomm(dic2);
}

}5)问题描述
新增、删除、查询都可以,就是更新不行,
控制台消息如下:DEBUG - Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@12abadc] for JPA transaction
DEBUG - begin
DEBUG - Obtaining JDBC connection
DEBUG - Obtained JDBC connection
DEBUG - initial autocommit status: true
DEBUG - disabling autocommit
DEBUG - Mark transaction for rollback
DEBUG - Initiating transaction rollback
DEBUG - Rolling back JPA transaction on EntityManager [org.hibernate.ejb.EntityManagerImpl@12abadc]
DEBUG - rolling back
DEBUG - rolled JDBC Connection
DEBUG - re-enabling autocommit
DEBUG - Closing JPA EntityManager [org.hibernate.ejb.EntityManagerImpl@12abadc] after transaction
DEBUG - Closing JPA EntityManager
DEBUG - Releasing JDBC connectionSpringHibernate