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

如何使用Spring MVC在Hibernate中将自动提交设置为false

於宏大
2023-03-14

我目前正在学习Spring Hibernate的集成,到目前为止,我正在让它发挥作用。但我遇到了这样的情况:我不想在进程结束时提交事务,因为我只想看到生成的sql语句,以用于测试和调试。

我已经在我的hibernate属性中添加了false,但它仍然不起作用。

如果使用Spring处理hibernate事务,是否可能实现?因为在hibernate中使用传统事务是可能的,只是不调用会话。commit()方法,并且不会保存所有更新和插入;

目前,我的服务层有以下代码:

@Transactional(传播=传播。支持,只读=真)公共类员工服务Impl{

@Autowired
private EmployeeDao employeeDao

@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void saveEmployee(Employee employee){

    // count the number of employee in the database
    int n  = employeeDao.getEmployeeCount();
    // lets say it should print 10 here
    System.out.println("number of employee before inserting : " + n);

    // insert to employee
    employeeDao.saveEmployee(employee);

    // then count the employee after inserting
    n  =  employeeDao.getEmployeeCount();

    // then it should print 11 here after inserting new employee
    System.out.println("number of employee after inserting : " + n);

/* Then Dont commit insert!!!
*/

}

}

道层代码:

public EmployeeDaoImpl implements EmployeeDao{

@Autowired
public void saveEmployee(Employee employee){

    sessionFactory.getCurrentSession.save(employee);

}

public int getEmployeeCount(){

    String count = sessionFactory.getCurrentSesion.createQuery("select count(emp.employeeId) from Employee emp")
    .list().get(0).toString;

return Integer.valueOf(count);
}

}

但这里发生的是,它确实提交了事务!,但是我不想仅仅为了测试和调试目的而提交事务。

我还尝试了@Transactional(propagation=propagation.SUPPORTS,readOnly=false)而不是@Transactional(propagation=propagation.SUPPORTS,readOnly=true)

但是这里发生的是它没有提交事务,但是员工的数量也没有增加。

所以,我希望在这里发生的是,在插入到employee表之前计算员工数量。然后插入到employee表中,再次计算员工数量,使其增加1。但在过程结束时,我不想提交插入!

伙计们,你们知道吗?

我将非常感谢任何帮助!谢谢!

共有1个答案

宰父俊民
2023-03-14

对于测试,请使用Spring测试框架。它为您处理自动事务回滚。如果你在寻找其他东西,你必须更具体。你的问题虽然充满了细节,但对你真正想做的事情却相当模糊。你只是经常使用“测试”和“调试”这样的词。这些词对不同的人来说可能意味着很多不同的事情。

 类似资料:
  • 问题内容: 我一直想知道为什么JDBC API提供了自动提交模式()。似乎很吸引人的麻烦只是诱使人们陷入麻烦。我的理论是,仅将其添加到JDBC是为了简化希望创建使用JDBC编辑和运行SQL的工具的供应商的生活。是否有其他原因打开自动提交,还是总是错误? 问题答案: 不幸的是,使用自动提交是特定于数据库的(事务行为也是如此)。我认为,如果您没有全局的程序化交易策略,自动提交可能比仅希望每个人都正确关

  • 我正在阅读https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/connectors/datastream/kafka/#kafka-消费者补偿提交行为配置 它说: 启用检查点:如果启用了检查点,Flink Kafka使用者将在检查点完成时提交存储在检查点状态中的偏移量。这确保了Kafka代理中提交的偏移量与检查点状态中

  • 问题内容: 我最近一直在使用sqlite4java库。我想我已经弄清楚了。唯一令我困扰的是,我不知道如何使用该库关闭自动提交。谁能帮忙吗?一个代码示例将不胜感激。 在此先感谢Boro 问题答案: Jefromi和king_nak是正确的-您只需要发出开始和结束事务的SQL语句即可。

  • 我试图创建一个springmvc项目配置与Hibernate使用web.xml 我的问题是,当我运行时,它不会自动创建用户表。 这是我的代码: 文件spring-config.xml 文件web.xml: 文件UserDAO: 文件UserDaoImpl: 文件用户: 这是我的日志:

  • 我不使用GUI编辑器手动创建布局,我需要将高度设置为“自动”,以便用户可以看到整个表单。我将GridLayout包装到FlowLayout中,这样输入就不会被拉伸。创建这样的布局的最佳实践是什么。是否有人可以修改它,使整个表单可见或使用GridLayout,但可以设置表单中输入的宽度和高度? 未使用包装方法设置首选尺寸 使用包装方法设置首选尺寸 将扩展状态设置为最大化,但更新按钮不完全可见。如何设

  • 问题内容: 我在JDBC中使用Spring,发现它是自动提交的。 如何配置以在spring-servlet.xml中将其关闭? 这是我当前的配置: 问题答案: 看来我的配置错过了这一行: 然后,在我的服务类中,我使用@Transactional批注。例如 如果addCompany_fail()中发生异常,则第一个addCompany()也将被回滚。 我阅读了这份文档,以了解在Spring中如何控制