spring - Spring将实体传递给超类
问题描述
我创建了这样的通用超类:
@Repository
public class RootQueryCreator<T> {
@PersistenceContext
private EntityManager em;
private T entity;
CriteriaBuilder criteriaBuilder = null;
CriteriaQuery<T> criteriaQuery = null;
Root<T> rootTable = null;
public RootQueryCreator() {}
public RootQueryCreator(T entity) {
super();
this.entity = entity;
}
@PostConstruct
public void initRootQuery() {
criteriaBuilder = em.getCriteriaBuilder();
criteriaQuery = (CriteriaQuery<T>)
criteriaBuilder.createQuery(this.entity.getClass());
rootTable = (Root<T>) criteriaQuery.from(entity.getClass());
}}
这个超类将被实体中的每个 DAOImpl-Class 使用。像这样:
@Repository
@Qualifier("myEntitiyClass")
public class MyEntityDAOImpl extends
RootQueryCreator<MyEntity> {
@Autowired
public MyEntityDAOImpl() {
super(new MyEntity()); //pass any Entity for the Root-Class from Criteria-Framework
}
@Override
public List<MyEntity> getAll() throws Exception {
super.getCriteriaQuery().select(super.rootTable);
return super.getEm().createQuery(criteriaQuery).getResultList();
}
public List<MyEntity> retrieveData(){
}}
每个 DAOImpl-Class 都将自动连接到一些服务类中,如下所示:
@Service
public class myLecture {
@Autowired
@Qualifier("myEntitiyClass")
private JpaRepositority<MyEntityDAOImpl> myEntityDAOImpl;
public void retrieveData(){
myEntityDAOImpl.retrieveData();
} }
最后我得到这个错误:
IllegalStateException:自动装配注释至少需要一个参数:MyEntityDAOImpl()
实际上我不需要将任何实体传递给 DAOImpl-Class。我该怎么办?
解决方案
Autowired
注释指定:
将构造函数、字段、设置方法或配置方法标记为由 Spring 的依赖注入工具自动装配。
@Autowired
但是您在没有提供任何依赖项作为参数的情况下注释了构造函数:
@Autowired
public MyEntityDAOImpl() { //-> Empty arg is the issue here
super(new MyEntity()); //pass any Entity for the Root-Class from Criteria-Framework
}
而例外:
IllegalStateException:自动装配注释至少需要一个参数:MyEntityDAOImpl()
事实上,您不需要自动装配任何东西,MyEntityDAOImpl
因为它的构造函数中不需要任何依赖项。因此,只需删除注释并让 Spring 将构造函数作为普通构造函数调用:
public MyEntityDAOImpl() {
super(new MyEntity()); //pass any Entity for the Root-Class from Criteria-Framework
}
推荐阅读
- django - Django 如何自动获取用户的 ID?
- xml - 使用 StaX 忽略评论
- tsql - 当其他视图依赖于它时如何使用 SCHEMABINDING 更改视图
- azure - Application Insight 如何自动捕获传入的 HttpRequest?
- angular - 等待一段时间后显示微调器
- javascript - Axios 使用 React 自动刷新
- django - 如何在 django 中将变量调用到另一个函数中?
- image - 标签图像边缘不连续(Matlab)
- wordpress - Woocommerce 更改客户名称订单
- c# - String NULL 是否总是等于 C# 中的另一个 String NULL?