评:忙活半天,注解事务跟xml里事务乱了,哎
昨天用JPA时遇到一个小问题,entitymanager是通过@PersistContext方法注入的,使用entitymanager查询 对象没有问题,但进行持久化时就无法保存数据到数据库,程序也没有抛出任何异常。瞎捣鼓了一天,总以为是persistence.xml文件哪里出问题, 最后上网查资料,看到别人提到transaction-type中的JTA和RESOURCE_LOCAL的区别,才想到自己在调用persis()方法 之前没有添加@Transactional标签。
转载:JTA和RESOURCE_LOCAL的区别就在于一个是声明性事务管理,由容器来打理你添加了 @TransactionAttribut(xxxx)注释的EJB method过程,而另一个需要手动从EM中得到一个事务句柄并使用begin(),commit()之类编程性事务管理方式
Spring中JPA 不能 插入、更新、删除数据(可以查找)
1.使用 @Transactional 注释
@Transactional //事务注解
public String saves(employee emp) {
try{
em.persist(emp); return "employee.dao保存成功";
}
catch(Exception e){
return "employee.dao保存出错";
}
}
2.要在 Spring 中使用 @Transactional 注释,必须在 Spring 配置文件中添加以下代码行:
<tx:annotation-driven transaction-manager="transactionManager"/>
昨天用JPA时遇到一个小问题,entitymanager是通过@PersistContext方法注入的,使用entitymanager查询 对象没有问题,但进行持久化时就无法保存数据到数据库,程序也没有抛出任何异常。瞎捣鼓了一天,总以为是persistence.xml文件哪里出问题, 最后上网查资料,看到别人提到transaction-type中的JTA和RESOURCE_LOCAL的区别,才想到自己在调用persis()方法 之前没有添加@Transactional标签。
转载:JTA和RESOURCE_LOCAL的区别就在于一个是声明性事务管理,由容器来打理你添加了 @TransactionAttribut(xxxx)注释的EJB method过程,而另一个需要手动从EM中得到一个事务句柄并使用begin(),commit()之类编程性事务管理方式
Spring中JPA 不能 插入、更新、删除数据(可以查找)
1.使用 @Transactional 注释
@Transactional //事务注解
public String saves(employee emp) {
try{
em.persist(emp); return "employee.dao保存成功";
}
catch(Exception e){
return "employee.dao保存出错";
}
}
2.要在 Spring 中使用 @Transactional 注释,必须在 Spring 配置文件中添加以下代码行:
<tx:annotation-driven transaction-manager="transactionManager"/>