gpt4 book ai didi

java - Spring Hibernate,避免语句重复注册和关闭

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:02 24 4
gpt4 key购买 nike

我正在优化算法,我注意到 Hibernate 重复创建和释放更新语句,而不是重复使用它们。这些都来自同一个查询。

15:57:31,589 TRACE [.JdbcCoordinatorImpl]:371 - Registering statement [sql : 'update ...
15:57:31,591 TRACE [.JdbcCoordinatorImpl]:412 - Releasing statement [sql : 'update ...
15:57:31,592 TRACE [.JdbcCoordinatorImpl]:525 - Closing prepared statement [sql : 'update ...
15:57:31,592 TRACE [.JdbcCoordinatorImpl]:278 - Starting after statement execution processing [ON_CLOSE]
15:57:31,594 TRACE [.JdbcCoordinatorImpl]:371 - Registering statement [sql : 'update ...
15:57:31,595 TRACE [.JdbcCoordinatorImpl]:412 - Releasing statement [sql : 'update ...
15:57:31,596 TRACE [.JdbcCoordinatorImpl]:525 - Closing prepared statement [sql : 'update ...
15:57:31,596 TRACE [.JdbcCoordinatorImpl]:278 - Starting after statement execution processing [ON_CLOSE]
15:57:31,597 TRACE [.JdbcCoordinatorImpl]:371 - Registering statement [sql : 'update ...
15:57:31,599 TRACE [.JdbcCoordinatorImpl]:412 - Releasing statement [sql : 'update ...
15:57:31,600 TRACE [.JdbcCoordinatorImpl]:525 - Closing prepared statement [sql : 'update ...
15:57:31,601 TRACE [.JdbcCoordinatorImpl]:278 - Starting after statement execution processing [ON_CLOSE]

算法的主要方法有一个@Scope 和一个@Transactional 注释。预期的行为是,如果出现任何问题,算法的更新是 ROLLBACK

在下面,该算法使用了一个@Service,它有一个不同的@Scope,也是一个@Transactional。该服务是使用 Hibernate 更新数据库的服务,带有 session.update(entity)。该文档说,默认情况下,嵌套事务会重用该事务(如果存在)。

  • 上述断言是否正确?
  • 范围变更会产生问题吗?
  • 我如何让 Hibernate 在事务期间重用该语句?

感谢您的关注

最佳答案

你的理解是正确的。范围与事务的传播方式无关,Spring 应该用控制事务的代理包装你的 beans,而不管范围如何。

使用 Hibernate 时无法重用语句。即使在手动编写 JDBC 代码时,也不推荐这种方法,因为这种方法会造成代码纠缠。常见的答案是在 JDBC 连接池上使用准备好的语句缓存。例如,对于 Apache DBCP 池,您可以使用 poolPreparedStatementsmaxOpenPreparedStatements 来控制它。与应用程序服务器捆绑在一起的池具有类似的设置。

关于java - Spring Hibernate,避免语句重复注册和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33830198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com