如何使通用类对多个实体使用JPARepository

跟随辛格:

场景:一个应用程序具有多个实体。每个实体表示一个数据库表。所有数据库表都具有主键列,但列名不同。

实体示例:

@Entity
@Table(name = "ABC",schema = "XYZ" )
public class SaveData extends EntityClass {

    @Id
    @Column(name = "ABC_ID", nullable = false, insertable = true, updatable = true, precision = 0)
    private int id;

    @Column(name = "ABC1_ID", nullable = false, insertable = true, updatable = true, precision = 0)
    private int abc1_id;

    @Column(name = "DATA", nullable = true, insertable = true, updatable = true, precision = 0)
    private String data;

   //Getter - Setter methods of the above member variables.

}

EntityClass就像泛型类。所有实体类都将扩展此抽象类。

@MappedSuperclass
public abstract class EntityClass {

    @Id
    private int id;
}

该应用程序的Dao界面如下:

@Repository
public interface DaoRepos extends JpaRepository<EntityClass,Long> {

}

服务等级示例:

@Component
public class ServiceMethodsImpl implements ServiceMethods {

    @Autowired
    private DaoRepos daoRepos ;

    @Override
    public void saveDatainDB(SaveData saveData ) {
        daoRepos.save(saveData);
    }

}

问题:如果我像下面这样声明dao接口:

@Repository
public interface ReviewRepos extends JpaRepository<SaveData,Long> {

}

SaveData在JPARepository中一样发送参数,那么我saveDatainDB在服务类中的方法就可以正常工作了。

现在,这仅用于保存实体的数据。同样,存在其他实体,并且需要应用相同的保存功能。因此,我想到了创建一个将代表所有实体的通用类(在此示例中EntityClass)。该类将作为参数发送给,JPARepository因此在运行时,我们可以覆盖EntityClass带有子类的对象(例如SaveData

但是Spring不允许创建EntityClass没有@Id的Class 因此,我必须声明一个ID列。同样在我的数据库中,每个表都有一个主列,但是所有表中该列的名称都不相同。例如,表XYZ将具有主列xyz_id表ABC将具有主列abc_id

因此,我必须在SaveData带有@Column注释的子类实体中定义一个ID列

现在,当我尝试保存时,id除了id中存在之外,还会创建一个单独的SaveData这额外id产生了错误unrecognized column

任何有关如何处理此问题的帮助将不胜感激。另外,请验证我的方法是否正确。

彼得·萨利(PeterŠály):

对于旧系统,可以使用@AttributeOverride注释覆盖id列名称。

@Entity
@AttributeOverride(name="id", column=@Column(name="ABC_ID"))
@Table(name = "ABC",schema = "XYZ" )
public class SaveData extends EntityClass {

    @Column(name = "ABC1_ID", nullable = false, insertable = true, updatable = true, precision = 0)
    private int abc1_id;

    @Column(name = "DATA", nullable = true, insertable = true, updatable = true, precision = 0)
    private String data;    
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用通用实体的Spring JpaRepository

如何为多个类创建一个通用的JpaRepository?

EF Core 5.0如何使用一个通用存储库管理多个实体类

使用JPARepository保存实体

如何对多个实体使用单个JPA规范类和方法

C# 如何将 Json 反序列化为使用基类的通用实体?

如何使用内部构造函数从具有新约束的通用类创建实体

如何使用JPARepository仅返回目标实体

如何对多个实体使用AuthMiddleware?

如何使用Maven从具有通用架构的多个XSD生成Java类

如何使用Spring Boot JpaRepository保存多个表

我们如何使用单个实体类处理多个存储过程

如何创建支持通用ID(包括自动生成的ID)的通用实体模型类?

标准规范-如何编写通用类以通过实体的任何枚举字段过滤实体

用于多个相同结构的表集的通用/通配符实体类

使用asm如何声明非通用类实现通用接口

如何使用通用的枚举类扩展通用的接口?

Spring:如何在不使用主键的情况下使用JpaRepository方法检索实体集?

如何将多个类添加到通用ArrayList?

如何使用JPA管理多个实体?

如何使用Doctrine QueryBuilder删除多个实体

如何使用Dapper从多个表加载实体?

是否可以创建可由多个ContentView使用的通用ObservableObject类?

指定多个类的通用fieldType

多个类的Rails通用方法

通用参数“扩展”多个类

多个实体的通用JPA存储库

实体的多个元数据类

构建通用 Lucene 查询以针对多个实体运行时如何排除或忽略字段