当前位置: 首页 > 知识库问答 >
问题:

在其他类中使用Spring Data JPA与EntityManager混合时出错:没有名为“事务管理器”的bean可用

裴令秋
2023-03-14

由于Spring Data JPA,我使用jparepository,没有使用额外的@bean@qualifier(value=“xxx”)@configuration

现在我开始向一个旧项目添加代码,我看到了使用EntityManager@transactional的类和类型化查询。我认为它们没有必要。

所以我想添加我的新样式的存储库,同时保持旧代码不变,但是这个类及其测试,我看到错误:

nosuchBeanDefinitionException:没有名为“事务管理器”的bean可用:没有为限定符“事务管理器”找到匹配的PlatformTransactionManager bean-限定符和bean名称都不匹配!

存储库:

public interface UserPurchaseRepository extends JpaRepository<UserPurchase, Long> {
    /**
     * Find the last purchase time of a user.
     * @param userId the id of user to search
     * @return the last buy time
     */
    OffsetDateTime findLastBuyDateByUserId(String userId);

}
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase
@SpringBootTest
public class UserPurchaseServiceIntegrationTest {
    private static final String id = UUID.randomUUID().toString();
    private static final String userId = UUID.randomUUID().toString();
    private static final OffsetDateTime lastBuyDate = OffsetDateTime.now();

    @Autowired
    private UserPurchaseRepository repository;


    @Before
    public void setUp() {
        UserPurchase purchase = new UserPurchase();
        purchase.setId(id);
        purchase.setUserId(userId);
        purchase.setLastBuyDate(lastBuyDate);
        repository.save(purchase);
    }

    @After
    public void cleanUp() {
        repository.deleteAll();
    }

    @Test
    public void testFindLastBuyTimeByUserId() {
        // given (setUp())

        // when
        OffsetDateTime foundLastBuyTime = repository.findLastBuyDateByUserId(userId);

        // then
        Assert.assertEquals(lastBuyDate, foundLastBuyTime);
    }


}

共有1个答案

蓝昊然
2023-03-14

我找到了原因:我们使用了一个名为mitre的OpenID库,这个依赖项使用EclipseLink作为JPA而不是Hibernate的实现,因此我们不得不在spring-data-jpa中排除Hibernate。如果我们想要使用JPA-Hibernate,这两者会混淆,@autowired很容易混淆使用哪个,所以我们只能编写类型化查询来使用这个库。这就是为什么现在是这样。看来我得自己写所有的查询。

 类似资料: