8.0 JPA,如何使用相同的类(实体)来映射不同的表? | Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

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

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

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

回答1:

不确定您可以完全按照自己的意愿进行操作(比如说Ta加入Tb不加入),但是可以使用继承来产生相同的结果。

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

Ta和Tb从AbsT继承,每个都有@Table批注

以下为AbsT的注释:

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
复制代码
@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批注,并且只包含一个空的构造函数。 所有代码都将在您的父类中。 在您的方法上使用泛型,指示您的参数实体是从模板类扩展的,不需要更改任何代码。 正确的映射将出现在您传递的每个子类中。

写昏头了,文章编号都错了

文章翻译至Stack OverFlow: stackoverflow.com/questions/9…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享