JPA,如何使用相同的类(实体)来映射不同的表?

2022-08-31 19:51:43

我有两个表:和。它们具有完全相同的表结构,但具有不同的表名称。TaTb

我尝试创建一个实体类来映射表结构。我的一些常见应用程序模块将使用此实体类来动态查询和更新参数或基于参数进行动态查询和更新。可以在JPA中完成吗?如何编写程序以在运行时将实体类动态映射到不同的表?TaTb


答案 1

不确定是否可以完全按照自己的意愿进行操作,但可以使用继承来产生相同的结果。

AbsT 具有所有字段,但没有@Table注释

Ta 和 Tb 继承自 AbsT,各有一个@Table注释

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

在 AbsT 中。

示例代码:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class abstract AbsT {
    @Id Long id;
...
}

@Entity
@Table(name = "Ta")
public class Ta extends AbsT {
...
}

@Entity
@Table(name = "Tb")
public class Tb extends AbsT {
...
}

答案 2

创建一个带有注释的抽象类(模板类@MappedSuperclass然后对其进行扩展。扩展的每个类都使用@table,@entity批注,并且只包含一个空构造函数。所有代码都将位于父类中。在方法上,使用泛型来指示参数实体从 templateClass 扩展,并且不需要再更改代码。正确的映射将在你经过的每个儿子中。


推荐