当前位置: 首页 > 知识库问答 >
问题:

spring+Hibernate:在结束时手动提交事务

鲜于星波
2023-03-14
@Controller
public class COACategoriesController {

protected static Logger log = Logger.getLogger(COACategoriesController.class);


@Resource(name="COACategoriesService")
private COACategoriesService obj_coacs;
@Resource(name="COAMaintenanceService")
private COAMaintenanceService obj_coams;

 @RequestMapping(value = "/addCoaCategory", method = RequestMethod.POST)
 public String addCoaCategory(@RequestParam("conCatName") String coaCatName, Model model) {

     Date sysdate = null;
     String Message="";
     try{

     sysdate = new Date();


     COACategoriesModel model1 = new COACategoriesModel( coaCatName, 1, "", sysdate , 0);

     COAMaintenanceModel account =  new COAMaintenanceModel();
        account.setDiscription("Test Description");
        account.setCategoryId(model1);

        Message="Fail-First";
        obj_coacs.AddCOACategories(model1);


        Message="Fail-Second";
        obj_coams.AddCOAMaintenance (account);


        Message="Add Successfully";
     }catch(Exception ex){
         log.error("Exception.."+ex);
         model.addAttribute("success", Message);
     }



        return "fin/category";
    }



}

共有1个答案

乐正明辉
2023-03-14

首先,需要将属性connection.autoCommit设置为false,以启用事务级提交。

这可以通过添加

<property name="connection.autocommit">false</property>

hibernate.cfg.xml

Session s = null;
Transaction t = null;
try {
  s = getSessionFactory().openSession();
  t = s.beginTransaction();
  // code to persist the object

}
catch(HibernateException he) {
  if(t != null) {
     t.rollback();
  }
}
finally {
  if(s != null) {
    s.close();
  }
}
 类似资料:
  • 问题内容: 我们在服务器迁移方面遇到问题。我们有一个拥有大量事务的应用程序,它在一台数据库服务器上运行良好。但是,当将同一数据库传输到另一台服务器时。我们面临以下错误。 同一数据库将所有数据复制到另一台服务器。如果我们将连接字符串更改为旧服务器,则它可以正常工作。 有人可以建议吗? 问题答案: 您似乎遇到的问题是,一个数据库中的记录可以接受,而另一个数据库中的记录却可以接受。建议您查看两个数据库结

  • 我有一个带MySQL的Spring Boot应用程序JPA。在我的控制器中,当我发布一个实体时,我可以调用存储库。保存,然后返回“创建/更新”对象。 但是,当我查看数据库时,我看到对象没有更新。 这是我的application.yml: 你知道我还要做什么吗? 这是我的控制器: 和MyEntityService:

  • 我在A处有个方法 服务B中的另一种方法 我的问题是,例如,当“repository.insertRandomValue()”抛出ConstraintViolationException时,即使它在catch()中被捕获,线程也以 我尝试将传播设置为REQUIRES\u NEW,并尝试将transaction manager和GlobalRollbackOnParticipationFailure设

  • 我正在使用JPA2Hibernate实现和Spring MVC来管理事务 目前,我们有一个事务是一个单一的方法,类似于: 它是从JSF页面调用的方法。 save方法继承自通用DAO,它将许多具有级联oneToMany关系的实体保存到数据库中,但是它必须在数据库中执行大约1000s的insert语句,所以它需要很长的时间。 显然,我不能在方法中抛出异常,它只是来自源代码的一个调用。JPA Persi

  • 我的Spring boot和Hibernate项目中有Javers实现。但是,有时javerscommit失败,这也会回滚我的业务数据库事务,因此API调用失败。 是否有可能实现Javers异步提交,这样即使Javers提交有一些问题,我的业务事务也不会生效,因此,API调用将成功? 非常感谢。

  • 我正在使用方法级别的@KafkaHandler(类级别的@KafkaListener)消费Kafka事件。 我见过很多例子,其中有一个“acknowledge”参数可用,在这个参数上可以调用“acknowledge()”方法来提交事件的消耗,但是,当我将它作为参数包含到我的方法中时,我无法填充acknowledge对象。使用KafkaHandler时如何手动提交?有可能吗? 代码示例: 使用Spr