gpt4 book ai didi

hibernate - 如何覆盖在映射父类(super class)中声明的@GeneratedValue?

转载 作者:行者123 更新时间:2023-12-03 17:59:01 27 4
gpt4 key购买 nike

我们有一个 @MappedSuperclass class Entity它定义了默认 id 和生成器:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Override
public K getId() {
return id;
}

我不想在子类 Foo 中使用任何生成器完全没有,因为我会自己提供主键。

我必须延长 Foo来自基类 Entity ,因为很多功能都依赖于这个基类。注释 @AttributeOverrides似乎不支持覆盖 @GeneratedValue .

最佳答案

听起来像 Foo实际上不是 Entity 的子类型并且永远不应该真正扩展它。继承是一个强有力的契约。您不会仅仅为了访问某些方法而扩展某个东西。

在 hibernate 中,当您从数据库中获取 Foo 对象时,您实际上也在从实体表中进行选择。两个表都通过它们的 @Id 连接起来。字段,您将看到 IdFoo将与 Id 相同在 Entity .

这使我们能够执行以下操作。

Entity entity = new Foo();
if (entity instanceof Foo) {
//we have a Foo object
} else if( entity instanceof ...) {
//we have a ...
}

如果您想提供自己的 ID,则不应再扩展父类(super class)。如果您想将大量逻辑包含到许多 hibernate 类中,但它们并不是该类的真正子类型,请考虑使用 @Embedded反而。

关于hibernate - 如何覆盖在映射父类(super class)中声明的@GeneratedValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com