Java 如何使泛型类对多个实体使用JPARepository

Java 如何使泛型类对多个实体使用JPARepository,java,spring-boot,jpa,spring-data-jpa,Java,Spring Boot,Jpa,Spring Data Jpa,场景: 一个应用程序有多个实体。每个实体表示一个数据库表。所有数据库表都有主键列,但列名不同 实体示例: @Entity @Table(name = "ABC",schema = "XYZ" ) public class SaveData extends EntityClass { @Id @Column(name = "ABC_ID", nullable = false, insertable = true, updatable = true, precision = 0)

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

实体示例:

@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> {

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

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

}
@存储库
公共接口审查程序扩展了JpaRepository{
}
在JPARepository中将参数作为
SaveData
发送,则服务类中的my
saveDatainDB
方法可以正常工作

现在,这仅用于保存实体的数据。同样,存在其他实体,需要应用相同的保存功能。因此,我考虑创建一个表示所有实体的泛型类(在本例中为
EntityClass
)。该类将作为参数发送到
JPARepository
,以便在运行时,我们可以用子类覆盖
EntityClass
(例如
SaveData

但是Spring不允许在没有
@Id
列的情况下创建类
EntityClass
。所以我必须声明一个ID列。同样在我的数据库中,每个表都有一个主列,但所有表中该列的名称都不同。 例如 表XYZ将有一个主列XYZ_id 表ABC将有一个主列ABC\U id

因此,我必须使用
@column
注释在子类实体
SaveData
中定义一个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;    
}
现在,当我尝试保存时,会在
SaveData
类中存在的
id
列之外创建一个单独的
id
列。这个额外的
id
会产生错误,因为
列无法识别

我们将感谢您对如何处理此问题的任何帮助。
另外,请验证我的方法是否正确。

对于旧式系统,可以使用@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;    
}