如果相同的表但不同的模式,如何避免重复 jpa 映射(实体、服务、存储库..)?
Posted
技术标签:
【中文标题】如果相同的表但不同的模式,如何避免重复 jpa 映射(实体、服务、存储库..)?【英文标题】:How to avoid to duplicate a jpa mapping (entity, service, repository..) if same table but different schemas? 【发布时间】:2021-06-08 05:38:15 【问题描述】:我正在使用 jpa 并且有 2 个实体,但在这种情况下:
实体 A = schemaA.tableX 实体 B = schemaB.tableX
tableX 相同,但在 2 个不同的架构(A 和 B)上重复,内部相同的列,我应该通过我的应用程序用相同的数据填充它们。
问题是:是否有可能在我的代码中,映射一次这个 tableX 并且以某种方式,数据将被拆分为两个,每个模式一个??
我不想:
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "TableX", schema = "A")
public class A implements Serializable
@Id
@Column(name = "id")
private String id; <=== on table A
还有:
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "TableX", schema = "B")
public class B implements Serializable
@Id
@Column(name = "id")
private String id; <=== on table B
实体、存储库、服务、实现的愚蠢副本/过去...因为完全相同的表!
【问题讨论】:
【参考方案1】:你可以通过@MappedSuperClass
做到这一点:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@MappedSuperClass // <-- see this annotation
public class AbstractTable implements Serializable // <-- name the class however you want
@Id
@Column(name = "id")
private String id;
然后将其他两个类更改为:
@Entity
@Table(name = "TableX", schema = "A")
public class A extends AbstractTable
和
@Entity
@Table(name = "TableX", schema = "B")
public class B extends AbstractTable
【讨论】:
以上是关于如果相同的表但不同的模式,如何避免重复 jpa 映射(实体、服务、存储库..)?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 hibernate/jpa 注释将一个类映射到不同的表
如何将来自不同表但相同数据库mysqli php的2列相乘[关闭]