如何使用多个序列映射 JPA 中的继承?

发布于 2025-01-01 16:50:33 字数 291 浏览 1 评论 0原文

我有一个抽象类 A,许多其他类都继承它。
在我们的数据库(Oracle)中,这些类由每个类的一个表进行映射,并且继承是通过子表中的 FK 实现的(子级 PK 上的 FK 引用 A 的 PK)。
到目前为止,一切都很好。相当标准。

现在,我们如何生成 PK?当然是序列...但是我们的 DBA 决定,当在继承 A 的特定表 B 中创建行时,PK 将从不同的序列(B 的序列)生成。

我的问题 - 如何在 JPA 中映射它?我希望类 B 继承类 A,但是当它实例化时,我希望使用不同的序列生成它的 ID(即 A 的 ID)。

I have an abstract class A that many other classes inherits it.
In our DB (Oracle), these classes are mapped by a table per class, and the inheritance is implemented by an FK in the child table (FK on the child's PK referencing A's PK).
So far so good. Pretty standard.

Now, how do we generate the PK? with a sequence of course... but our DBA decided that when creating rows in a specific table B which inherits A, the PK will be generated from a different sequence (B's sequence).

My question - how to map this in JPA? I want class B to inherit class A, but when it's instantiated I want its ID (which is A's ID) to be generated using a different sequence.

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

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

发布评论

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

评论(1

酸甜透明夹心 2025-01-08 16:50:33

JPA 不提供覆盖子类中的序列生成器的方法。

您可以将超类设置为@MappedSuperclass,而不在其中定义id,然后您可以在子类中以不同的方式定义它。

如果使用EclipseLink,您可以在子类上定义DescriptorCustomizer (@Customizer),并将描述符上的sequenceName 设置为其他序列。

JPA does not provide a way to override the sequence generator in a subclass.

You could make the superclass a @MappedSuperclass, and not define the id in it, then you could define it differently in the subclass.

If using EclipseLink, you could define a DescriptorCustomizer (@Customizer) on the subclass and set the sequenceName on the descriptor to the other sequence.

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