Я хотел бы использовать 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();
}
Итак, мне интересно использовать оба этих метода. Как я могу это исправить?!