0
点赞
收藏
分享

微信扫一扫

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


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

举报

相关推荐

0 条评论