[英]Dynamically Identify entity class and JPA Interface
我有一個要求,基於配置文件,我需要將2個不同的類注入DAO層以執行CRUD操作。 假設我們分別為配置文件a和b具有A類和B類。 現在在DAO層中不使用其他條件(因為我正在使用當前基於概要文件的條件,因此我正在使用服務層來調用2個不同的方法1.saveA(),2.saveB()。)但是有什么辦法使它更通用,並基於配置文件或通過類引用,我可以實例化不同的實體以及JPA類? 我嘗試使用
<T extends Parent> T factoryMethod(Class<T> clazz) throws Exception {
return (T) clazz.newInstance();
}
但這也將迫使我將返回的對象強制轉換為類。 我嘗試為類A和類B創建一個父P,並改為使用它們,但是在將實體類型注入JPARepository時感到困惑。 我嘗試創建一個SimpleJPARepository,但是沒有用,因為ARepository和BRepository中有重寫的方法。 或者,有沒有一種方法可以將相同的實體類用於2個不同的表? 這樣就可以解決。 對於1個配置文件,我具有不同的列集,而對於第二個配置文件,我具有不同的列。
這就是我的期望:可能嗎? 或者,我現在的做法是正確的嗎?
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();
}
您可以創建如下的方法實用程序: key
是實體的類類型, value
是存儲庫。
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.