場景:一個應用程序具有多個實體。每個實體表示一個數(shù)據(jù)庫表。所有數(shù)據(jù)庫表都有一個主鍵列,但列名不同。實體示例:@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 就像一個泛型類。此抽象類將由所有實體類擴展。@MappedSuperclasspublic abstract class EntityClass { @Id private int id;}該應用程序有一個Dao界面,如:@Repositorypublic interface DaoRepos extends JpaRepository<EntityClass,Long> {}服務類示例:@Componentpublic class ServiceMethodsImpl implements ServiceMethods { @Autowired private DaoRepos daoRepos ; @Override public void saveDatainDB(SaveData saveData ) { daoRepos.save(saveData); }}問題:如果我聲明 dao 接口,如下所示:@Repositorypublic interface ReviewRepos extends JpaRepository<SaveData,Long> {}像在JPARepository中一樣發(fā)送參數(shù),然后我在服務類中的方法運行良好。SaveDatasaveDatainDB現(xiàn)在,這僅用于保存實體的數(shù)據(jù)。同樣,存在其他實體,并且需要應用相同的保存功能。因此,我想創(chuàng)建一個表示所有實體的泛型類(在本例中)。該類將作為參數(shù)發(fā)送到,以便在運行時,我們可以重寫 with 子類(例如EntityClassJPARepositoryEntityClassSaveData)但是Spring不允許創(chuàng)建沒有列的類。因此,我必須聲明一個 ID 列。同樣在我的數(shù)據(jù)庫中,每個表都有一個主列,但所有表的該列的名稱都不同。例如,表 XYZ 將具有主列,xyz_id表 ABC 將具有主列abc_idEntityClass@Id因此,我必須在子類實體中定義一個帶有注釋的 ID 列。SaveData@Column現(xiàn)在,當我嘗試保存時,除了類中存在的列之外,還會創(chuàng)建一個單獨的列。此額外內容會將錯誤創(chuàng)建為 。ididSaveDataidunrecognized column另外,我很想知道我的方法是否正確。
1 回答

Qyouu
TA貢獻1786條經(jīng)驗 獲得超11個贊
對于舊系統(tǒng),可以使用@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;
}
添加回答
舉報
0/150
提交
取消