我们有一个@MappedSuperclass class Entity定义默认id和生成器:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Override
public K getId() {
return id;
}
Run Code Online (Sandbox Code Playgroud)
我想不要在子类Foo中使用任何生成器,因为我将自己提供主键.
我必须Foo从基类扩展Entity,因为很多很多函数都依赖于这个基类.注释@AttributeOverrides似乎不支持覆盖@GeneratedValue.
在我看来,Foo它实际上并不是它的子类型Entity,也不应该真正扩展它。继承是一种强有力的契约。您不会仅仅为了访问某些方法而扩展某个东西。
在 hibernate 中,当您从数据库获取 Foo 对象时,您实际上也是从实体表中进行选择。@Id两个表都通过它们的字段连接,您将看到Idin 中的与in 中Foo的相同。IdEntity
这使我们能够执行以下操作。
Entity entity = new Foo();
if (entity instanceof Foo) {
//we have a Foo object
} else if( entity instanceof ...) {
//we have a ...
}
Run Code Online (Sandbox Code Playgroud)
如果您想提供自己的 ID,则不应再扩展超类。如果您想要将大量逻辑包含到多个 hibernate 类中,但它们实际上并不是该类的子类型,请考虑使用它@Embedded。
| 归档时间: |
|
| 查看次数: |
2561 次 |
| 最近记录: |