带有@Transactional的JPA javax.persistence.TransactionRequiredException,带有2个数据源

时间:2018-08-09 23:08:45

标签: java spring hibernate jpa spring-data-jpa

我正在尝试从1个数据源(A)读取并将数据从该数据源(A)写入另一个数据源(B)。我需要通过注释设置所有Java Spring 5 bean,因为我需要创建占位符数据源并在运行时提供登录详细信息。

我已经设置了2个LocalContainerEntityManagerFactoryBeans(使用数据源A和B)和一个JpaTransactionManager(B),将此事务管理器称为“ tm”-全部命名。

在我的DAO中,

@Transactional('tm')
@Repository
public interface SomeDao extends JpaRepository<SomeModel, Long> {
    @Query("select soemthing something...")
    List<SomeModel> getter(Somefields foobar);

    @Modifying
    @Query("insert something something...")
    void insert(Somefields morestuff);

所以回到我定义JPA config / bean的地方,我有一个

@Configuration
@EnableJpaRepositories(
    entityManagerFactoryRef = "A",
    transactionManagerRef = "B"
)

这显然可以很好地加载,因为我可以运行getter并从数据源A获取正确的数据。当我尝试使用insert方法时-理想情况下,我想写入数据源B,它只会抛出javax.persistence。 TransactionRequiredException。即使没有插入并且使用了我的DAO继承的CrudRepository .save(Object S),它也不会插入数据库,并且调用我的DAO.flush()也会抛出no Transaction正在进行。

调用@Transactional('tm')不会自动创建某些事务吗?我不明白为什么无论尝试如何都会出现此错误。我什至可以利用这两个实体管理器和jpatransaction管理器来处理各种数据源吗?

0 个答案:

没有答案