我有一个要求,根据配置文件,我需要将2个不同的类注入DAO层以执行CRUD操作。假设我们分别为配置文件 a 和 b 设置了类 A 和 B 类。现在在DAO层中不使用if else条件(因为我正在使用当前基于配置文件的那个条件,我正在使用服务层调用2个不同的方法1.saveA(),2.saveB()。但是,有没有办法使它更加通用并基于配置文件,或者通过类引用,我可以实例化不同的实体以及JPA类?我尝试使用<T extends Parent> T factoryMethod(Class<T> clazz) throws Exception { return (T) clazz.newInstance(); }但这也将迫使我将返回的对象转换为类。我尝试为类 A 和 B 创建父 P,并改用它们,但在将实体类型注入 JPA 存储库时感到困惑。我尝试创建一个简单的JPA存储库,但没有工作,因为A存储库和B存储库中有被覆盖的方法。或者,有没有办法对2个不同的表使用相同的实体类?这样就可以解决。对于1个配置文件,我有不同的列集,而对于第2个配置文件,我有不同的列。这就是我所期望的:这可能吗?或者,我现在的做法是正确的?public void doStuff(Class<T> class){ GenericRepository repo; if(class instanceof A){ //use ARepository; repo = applicationContext.getBean(ARepository); }else{ //use BRepository; repo = applicationContext.getBean(BRepository); } repo.save(class); repo.flush();}
1 回答
守着一只汪
TA贡献1872条经验 获得超4个赞
您可以创建如下方法实用程序:是实体的类类型,是存储库。keyvalue
Map<Class<? extends Parent>, JpaRepository> repoMapping = new HashMap<>();
@PostConstruct
public void init(){
repoMapping.put(A.class, applicationContext.getBean(ARepository));
repoMapping.put(B.class, applicationContext.getBean(BRepository));
}
public JpaRepository getRepo(Class<? extends Parent> classs){
return repoMapping.get(classs);
}
添加回答
举报
0/150
提交
取消
