gpt4 book ai didi

spring - 具有多个实体查找器的通用 spring jpa 存储库

转载 作者:行者123 更新时间:2023-12-01 01:53:30 25 4
gpt4 key购买 nike

我的应用程序有超过 250 个表,每个表都有 ID 和 name 列。我正在尝试使用 hibernate 5+ 将我们的应用程序从 hibernate 3 迁移到 Spring-JPA 4.3。

在我当前的 hibernate 层中,我有(选项 1):

public class DAO
{
private Session session;

public DAO(Session session)
{
this.session=session;
}

public EntityA findById(String id)
{
//implementation
return entityA;
}
public EntityB findByName(String name)
{
//implementation
return entityB;
}
public EntityC findByIdAndName(String id, String name)
{
//implementation
return entityC;
}
}

回到过去,我可以使用更通用的方法完成以下操作,但如果我有 10 个不同的实体要按 ID 获取,我不想重新初始化这个类。
public class DAO<T>
{
public T findById(String id)
{
//implementation
return T;
}
public T findByName(String name)
{
//implementation
return T;
}
public T findByIdAndName(String id, String name)
{
//implementation
return T;
}
}

现在我如何在 Spring-JPA 中实现这一点。因此,如果我需要通过 ID 获取 10 个不同的实体,我不想初始化 10 个存储库,我想要一个存储库,我可以使用它来获取我想要的任何实体 byId 或 byName 或 byIDAndName。我可以使用 JdbcTemplate 轻松完成,但这意味着 JPA/hibernate 缓存机制可能无法跟踪它。

那么如何在一个 JPA 存储库中执行以下操作:
{
@Query("from EntityA where id=?1")
EntityA findEntityAById(String id);

@Query("from EntityB where name=?1")
EntityB findEntityBById(String name);

@Query("from EntityC where id=?1 and name=?2")
EntityC findEntityCById(String id,String name);
}

最佳答案

您应该能够创建一个具有公共(public)属性的父类(super class),将其标记为@MappedSuperClass,并为该父类(super class)创建一个存储库作为@NoRepositoryBean。你只需要为你的结果做一些类型转换。
this answer

关于spring - 具有多个实体查找器的通用 spring jpa 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42420519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com