Как настроить спящий режим для использования Spring Data save и Session Factory с Criteria API в Spring Boot - PullRequest
0 голосов
/ 08 октября 2019

Я хотел бы использовать Spring Data (метод сохранения, который использует @Transactional с именем по умолчанию - "actionManager ") и мой собственный настроенный Session Factory, чтобы использовать его, например, в Criteria API. Поэтому я настроил Session Factory, jpaVendorAdapter, DataSource, PlatformTransactionManager bean.

PlatformTransactionManager выглядит следующим образом:

    @Bean(name = "transactionManager")
    public PlatformTransactionManager hibernateTransactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
//        JpaTransactionManager transactionManager = new JpaTransactionManager();

        transactionManager.setSessionFactory(sessionFactory().getObject());
//        transactionManager.setDataSource(this.dataSource());

        return transactionManager;
    }

Итак, эта конфигурация не позволяет методу сохранения данных Spring работает правильно. Он не выдает никаких исключений при выполнении, но также не вставляет данные, только обновляет структуру таблицы. С другой стороны, если я использую

JpaTransactionManager transactionManager = new JpaTransactionManager();

вместо HibernateTransactionManager. Это работает нормально, но другие методы, использующие мою фабрику сеансов с автопроводкой, дают мне исключение: «javax.persistence.TransactionRequiredException: транзакция не выполняется"

Например:

@Transactional
public List find() {
    return this.getCSession().createNativeQuery("SELECT CAST(animals.rabbit.id as VARCHAR) AS id, name FROM animals.rabbit").getResultList();
}

Итак, мне интересно использовать оба этих метода. Как я могу это исправить?!

1 Ответ

0 голосов
/ 09 октября 2019

Как насчет использования JpaTransactionManager и использования EntityManager вместо Hibernate Session или, если вам действительно нужно Session , разверните его из EntityManager.

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