日期:2014-05-16  浏览次数:20462 次

使用JPA的EntityManager.persist()方法无法保存到数据库的问题

源:http://blog.csdn.net/licko/article/details/6301301

http://hi.baidu.com/daihome/item/5e8d0d0ee62b733bf3eafcc1

评:忙活半天,注解事务跟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"/>