首页 > 解决方案 > 与休眠事务代码相关的问题

问题描述

当我使用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;

    }

}

那么上面代码中最后一个方法事务管理器为什么要写呢?在这种方法中,内部发生了什么有人可以解释一下吗?

标签: javahibernatespring-boot

解决方案


仅基于文档:

将指定工厂的 Hibernate Session 绑定到线程,可能允许每个工厂有一个线程绑定 Session。

基本上感谢事务管理器,您可以执行各种 CRUD 操作并符合 ACID 数据库规则。

最重要的是:

支持自定义隔离级别和超时

然后如果某些操作只是获取数据,那么您可以将事务设置为readOnly提高性能。


推荐阅读