java - 与休眠事务代码相关的问题
问题描述
当我使用hibernate进行spring boot时,我对事务管理代码有些困惑。任何人都可以澄清我的疑问吗?
public class HibernateConfig {
@Value("${db.driver-class-name}")
private String DB_DRIVER;
@Value("${db.password}")
private String DB_PASSWORD;
@Value("${db.url}")
private String DB_URL;
@Value("${db.username}")
private String DB_USERNAME;
@Value("${hibernate.dialect}")
private String DB_DIALECT;
@Value("${hibernate.show_sql}")
private String DB_SHOW_SQL;
@Value("${entitymanager.packagesToScan}")
private String DB_PACAKAGESTOSCAN;
public DataSource dataSource() {
DriverManagerDataSource datasources = new DriverManagerDataSource();
datasources.setDriverClassName(DB_DRIVER);
datasources.setUrl(DB_URL);
datasources.setUsername(DB_USERNAME);
datasources.setPassword(DB_PASSWORD);
return datasources;
}
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionfactory = new LocalSessionFactoryBean();
sessionfactory.setDataSource(dataSource());
sessionfactory.setPackagesToScan(DB_PACAKAGESTOSCAN);
Properties hb_properties = new Properties();
hb_properties.put("hibernate.dialect", DB_DIALECT);
hb_properties.put("hibernate.show_sql", DB_SHOW_SQL);
return sessionfactory;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
}
那么上面代码中最后一个方法事务管理器为什么要写呢?在这种方法中,内部发生了什么有人可以解释一下吗?
解决方案
仅基于文档:
将指定工厂的 Hibernate Session 绑定到线程,可能允许每个工厂有一个线程绑定 Session。
基本上感谢事务管理器,您可以执行各种 CRUD 操作并符合 ACID 数据库规则。
最重要的是:
支持自定义隔离级别和超时
然后如果某些操作只是获取数据,那么您可以将事务设置为readOnly
提高性能。
推荐阅读
- spring - 为客户授予 Spring Oauth 2 授权码
- python - 烧瓶的 Pytest 错误
- javascript - React 中的搜索过滤器?
- c++ - 带有 libev 和自定义事件循环的 C++ libhiredis
- mysql - 我如何找到所有科目超过 70 的学生?
- c++ - 空白通用 Windows 应用程序 - C++/CX 返回退出代码 1 (0x1)
- angular - Angular 9强制异步管道嵌套在ngIf异步管道中
- python - 如何使用 RichTextCtrl 事件?
- forms - 对函数进行 powershell 表单按钮调用
- ag-grid - 试剂中的floatingFilter有问题吗?