我正在使用Spring Boot和Spring Data JPA。我想创建一个自定义存储库方法,如参考资料中所述。我需要在自定义方法中引用EntityManager。当CustomRepositoryImpl类具有@Autowired / @Inject字段时,它可以正常工作。我想要做的是使用JavaConfig配置此bean。这可能吗?到目前为止,我的尝试都失败了,这是我的代码:
Lightness
在我的@SpringBootApplication类中,根据定义是一个@Configuration类,我有一个像这样的@Bean定义:
public interface CustomerRepositoryCustom {
void resetAll();
}
public class CustomerRepositoryImpl implements CustomerRepositoryCustom {
// @Inject
private EntityManager em;
public CustomerRepositoryImpl(EntityManager em) {
this.em = em;
}
@Transactional
@Override
public void resetAll() {
// some code
}
}
这不起作用,此方法完全被忽略,我得到以下异常:
@Bean
public CustomerRepositoryCustom customerRepositoryCustom(EntityManager em) {
return new CustomerRepositoryImpl(em);
}
即。 Spring Data没有查看@Bean定义,它只是尝试使用默认构造函数创建自定义repo bean本身,该构造函数不存在。
是否可以指示Spring Data使用@Bean方法?
答案 0 :(得分:1)
我认为问题是bean的名称,它应该命名为customerRepositoryImpl
,在JavaConfig的情况下,它不是,如果你将javaconfig更改为它,它应该工作:
@Bean
public CustomerRepositoryCustom customerRepositoryImpl(EntityManager em) {
return new CustomerRepositoryImpl(em);
}
答案 1 :(得分:-1)
你试过吗?
@Repository
class MyCustomerRepo implements CrudRepository<User,Long>, CustomerRepositoryCustom{
}
class CustomerRepositoryCustomImpl implements CustomerRepositoryCustom{
private EntityManager em;
@Inject
public CustomerRepositoryImpl(EntityManager em) {
this.em = em;
}
@Transactional
@Override
public void resetAll() {
// some code
}
}
也删除你的@bean定义
修改强>
@autowired
EntityManager em;
@Bean
public CustomerRepositoryCustom customerRepositoryCustom() {
return new CustomerRepositoryImpl(em);
}