spring-data-jpa 使用JpaRepository持久化未知类型实体的最佳方法是什么?

ycggw6v2  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(140)

我正在处理一个包含一组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语句。
这是否被认为是最佳实践,或者是否有更好的方法?
先谢谢你。

ecbunoof

ecbunoof1#

解决方案已经在上面的注解中给出了,但我认为一个答案更方便:

@Autowire
private EntityManager em;

public persistEntity(Object entity) {
    em.persist(entity);
}

相关问题