JPA 俩个实体类映射同一个表的问题

发布于 2022-09-12 13:20:17 字数 662 浏览 65 评论 0

@Data
@Entity(name = "project")
public class ProjectA extends BaseEntity { ... }

@Data
@Entity(name = "project")
public class ProjectB extends BaseEntity { ... }

这样的情况,该如何处理。

相同启动会报:
Entities share the same JPA entity name: [project] which is not allowed!**

换成

@Data
@Entity(name = "project")
public class ProjectAEntity extends BaseEntity { ... }

@Data
@Entity(name = "project")
@Table(name = "project")
public class ProjectBEntity extends BaseEntity { ... }

报错

Not a managed type: class ...ProjectBEntity

查了很多,但是没什么实际上的效果,关于多个实体映射同一张表,有什么好的解决办法吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

木緿 2022-09-19 13:20:17

看了你的描述,ProjectAEntity与ProjectBEntity应该有相同的字段,从面向对象的层面来讲,这两个类可以抽象一个基类,使用JPA的 单表继承策略 应该可以解决你的问题;使用JPA的好处之一就是既能够满足面向对象的设计实体,又很够很多策略的满足表的映射

单表继承策略:
多个Java实体映射到一张数据表,在表中通过一列辨别字段来区别不同类别的实体

a.在父类实体的@Entity注解下添加如下的注解:

@Inheritance(Strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name=”辨别字段列名”)
@DiscriminatorValue(父类实体辨别字段列值)

b.在子类实体的@Entity注解下添加如下的注解:

@DiscriminatorValue(子类实体辨别字段列值) 

具体的例子可以搜索一下,应该有很多

魂归处 2022-09-19 13:20:17

为何不想想你为啥会有这样的需求呢?

狼亦尘 2022-09-19 13:20:17

看了下你的需求 你这加一个字段区分哪种类型就行了
哪需要再去搞一个类

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文