我正在处理一个包含一组JPA实体的Sping Boot 应用程序,其中一些实体对于应用程序是唯一的,但是一个子集是从独立的REST服务器检索的。
应用程序监听JMS消息,并在收到消息时向服务器发出REST调用以检索XML有效负载,然后将其解组为对象以用于某些业务逻辑。实体需要在收到消息时持久化到(PostgresQL)数据库,并在某些类的某些点检索。
但是,Xml编组是在不了解有效负载类型的情况下执行的,我想知道是否有类似的方法可以使用JpaRepository持久化实体,而不进行类型检查并使用工厂创建存储库。
目前我能想到的最合适的解决方案是拥有一个JpaRepositoryFactory,它返回适当的存储库,如下所示:
@Component
public class JpaRepositoryFactory {
@Autowired
FooRepository fooRepository;
@Autowired
BarRepository barRepository;
@Autowired
BazRepository bazRepository;
public static JpaRepository retrieveRepository(Class clazz) {
switch (clazz) {
case Foo.class:
return fooRepository;
break;
case Bar.class:
return barRepository;
break;
case Baz.class;
return bazRepository;
break;
default:
throw SomeJpaRepositoryFactoryException();
}
}
}
然而,有相当少的实体,我不喜欢在可能存在更好的解决方案的地方使用switch case语句。
这是否被认为是最佳实践,或者是否有更好的方法?
先谢谢你。
1条答案
按热度按时间ecbunoof1#
解决方案已经在上面的注解中给出了,但我认为一个答案更方便: