如何使泛型类对多个实体使用 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> {


}

像在JPARepository中一样发送参数,然后我在服务类中的方法运行良好。SaveDatasaveDatainDB


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


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


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


现在,当我尝试保存时,除了类中存在的列之外,还会创建一个单独的列。此额外内容会将错误创建为 。ididSaveDataidunrecognized column


另外,我很想知道我的方法是否正确。


慕姐4208626
浏览 141回答 1
1回答

Qyouu

对于旧系统,可以使用@AttributeOverride注释覆盖 id 列名。@Entity@AttributeOverride(name="id", column=@Column(name="ABC_ID"))@Table(name = "ABC",schema = "XYZ" )public class SaveData extends EntityClass {&nbsp; &nbsp; @Column(name = "ABC1_ID", nullable = false, insertable = true, updatable = true, precision = 0)&nbsp; &nbsp; private int abc1_id;&nbsp; &nbsp; @Column(name = "DATA", nullable = true, insertable = true, updatable = true, precision = 0)&nbsp; &nbsp; private String data;&nbsp; &nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java