5
|
Brandon Yarbrough · 技术社区 · 15 年前 |
![]() |
1
1
解决方案1:在视图筛选器中打开会话
解决方案2:业务层的事务边界
解决方案3:DAO层的事务边界除非DAO方法包含业务逻辑,否则将事务限制为DAO调用是没有意义的。这是接近“自动提交”模式的方法,我认为是有用的。 在任何情况下,如果您希望缩短事务,我建议您密切关注每个业务用例的“SQL足迹”(通过将org.hibernate.sql日志类别设置为debug),并将生成的SQL与您自己编写的SQL进行比较。 大多数时候,我都看到了缓慢的用例,这是因为Hibernate Lazy加载功能没有正确配置(它要么过于急切,在每个查询中添加12个连接级别,要么过于懒惰,按集合的元素发出查询) |
![]() |
2
1
这取决于您如何模块化代码。我假设您没有在控制器中编写所有与DB事务相关的代码。如果您已经将代码分隔到DAO或服务层,后者负责处理事务,那么只有所需的粒度才有意义。 长时间占用事务并不是一个好的设计,因此让过滤器打开会话可能是一个坏主意。除非,您有一些要为其打开会话的延迟加载对象。 如果上述不适用,那么您只能在数据访问层周围设置事务/会话边界。 |
![]() |
Gero Mendy · 如何为一个类分配兵变的结果。查询 1 年前 |
![]() |
Hamvy B · 替换不推荐的hibernate方法 1 年前 |
![]() |
Martin Pfeffer · Spring Boot JPA 1 年前 |
|
denstran · 休眠未生成正确的id 2 年前 |
![]() |
Frank · 忽略/跳过Hibernate架构验证中的特定字段 2 年前 |