开发者

How to override @GeneratedValue declared in mapped-superclass?

开发者 https://www.devze.com 2023-02-28 17:23 出处:网络
We have a @MappedSuperclass class Entity which defines the default id and the generator: @Id @GeneratedValue(strategy = GenerationType.AUTO)

We have a @MappedSuperclass class Entity which defines the default id and the generator:

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

I want to not use any generator in subclass Foo at all, because I will provide the primary key myself.

I must extend Foo from the base class Entity, because a lot and a lot functions depend on this base class. The annotation @AttributeOverrides seem开发者_C百科s not support to override @GeneratedValue.


Sounds to me like Foo is not actually a subtype of Entity and should never have really extended it. Inheritance is a strong contract. You would not extend a something just to get access to some methods.

In hibernate when you get a Foo object from the database you are actually also selecting from the Entity table. Both tables are joined via their @Id field, you will see the the Id in the Foo will be the same as the Id in Entity.

This enables us to do the following.

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

If you want to supply your own Id you should no longer extend the super class. If you have a whole lot of logic you want to include into a number of hibernate classes but they are not really subtypes of the class, consider using @Embedded instead.

0

精彩评论

暂无评论...
验证码 换一张
取 消