如何使用多个序列映射 JPA 中的继承?
我有一个抽象类 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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.