首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中级`@MappedSuperclass`‘未能坚持

中级`@MappedSuperclass`‘未能坚持
EN

Stack Overflow用户
提问于 2013-03-04 09:59:09
回答 1查看 511关注 0票数 0

我有三节课是这样的。

代码语言:javascript
复制
@Entity
class A {

    @Id @GeneratedValue @TableGenerator
    private long id;
}

@MappedSuperclass
abstract class B extends A {
}

@Entity
class C extends B {
}

上面还能起作用吗?而且,至少对EclipseLink来说,这是行不通的。

当我试图持久化一个C实例时,我得到了C

我在使用@MappedSuperclass的抽象中间类继承无法填充子类上发现了一个bug,但我不确定它是否完全相同。

更新@James的答案

对不起,我应该写得更详细些。是的,我打算继承SINGLE_TABLE。我没有BC的任何扩展属性。这只是一个层次化的类设计。

代码语言:javascript
复制
@DiscriminatorColumn
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
abstract class A {

    @Id @GeneratedValue @TableGenerator
    private long id;
}

@DiscriminatorValue("B") @Entity // I currently should do like this.
//@MappedSuperclass              // error
abstract class B<T extends SomeoneElse> extends A {
}

@DiscriminatorValue("C")
@Entity
class C extends B<James> {
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-04 15:56:18

我相信在JPA中,一个@MappedSuperclass必须是一个超类,而不是一个子类(顾名思义)。

我不知道拥有一个@Entiy子类作为@MappedSuperclass意味着什么?

你想做什么?

对于@Entity继承,JPA只提供了三个选项: SINGLE_TABLE、JOINED和TABLE_PER_CLASS。所有持久性子类都必须是实体。

我假设您正在使用连接继承,并试图避免为B.JPA表。JPA没有指定一种标准的方法来实现这一点。在EclipseLink中,可以通过使表与父表(@ table (name="A"))匹配来避免表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15198813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档