Вопрос, связанный с кодом транзакции Hibernate - PullRequest
1 голос
/ 08 июня 2019

Пока я работаю над весенней загрузкой в ​​спящем режиме, у меня возникла путаница с кодом управления транзакциями. Кто-нибудь может прояснить мои сомнения?

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;

    }

}

Ну в вышеприведенном коде последний способ управления транзакциями, зачем нам писать? В этом методе кто-нибудь может объяснить, что происходит внутри?

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Только на основании документов:

Связывает Hibernate Session из указанной фабрики с потоком, потенциально допускает один связанный с потоком сеанс на фабрику.

В основном благодаря менеджеру транзакций вы можете выполнять различные операции CRUD и соответствовать правилам базы данных ACID.

Кроме того это:

Поддерживает пользовательские уровни изоляции и тайм-ауты

Тогда, если определенные операции только извлекают данные, вы можете установить транзакцию как readOnly, увеличивающую производительность.

0 голосов
/ 08 июня 2019

Поскольку hibernate нуждается в транзакциях для выполнения своих операций.Примером может быть отношение @OneToMany.После того, как сущность загружена, вам действительно нужна активная транзакция, чтобы получить ее ленивые отношения.Только в активной транзакции объект находится в управляемом состоянии.

Выполните следующий эксперимент.Попробуйте загрузить объект с отношениями Lazy без активной транзакции, загрузка будет успешной, но затем попытайтесь получить доступ к одному из отношений.

Без активной транзакции вы не сможете выполнить простую операцию сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...