java - 与Hibernate事务代码相关的问题

标签 java hibernate spring-boot

当我使用 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 需要事务才能执行其操作。示例是@OneToMany 关系。加载实体后,您实际上需要一个 Activity 事务才能获取其惰性关系。仅在 Activity 事务中,实体才处于托管状态。

做如下实验。尝试在没有 Activity 事务的情况下加载具有惰性关系的实体,加载将成功,但随后尝试访问其中一个关系。

如果没有 Activity 事务,您将无法执行简单的保存操作。

关于java - 与Hibernate事务代码相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56506034/

相关文章:

spring - ROLE_USER 和 ADMIN 对 URL 的访问限制

mysql - 字段列表中未知表 'hibernate_sequence'

Java,从文件中读取抛出io异常 - 读取错误

java - 排除小括号字母上的标记

java - 删除有约束的行

java - HQL : Help in preforming join

具有最终用户提供的字段的类的 Java 构造函数

java - RabbitMQ:快速生产者和慢消费者

jquery - 在 JSP 中向表单添加弹出窗口

spring-boot - Mybatis 和 Spring 数据与 hibernate 结合在一起