为了账号安全,请及时绑定邮箱和手机立即绑定

动态识别实体类和 JPA 接口

动态识别实体类和 JPA 接口

MYYA 2022-09-28 16:09:19
我有一个要求,根据配置文件,我需要将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);

  }


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号