JPA:有没有办法为Embeddable实现继承
JPA: Is there some way to implement inheritance for Embeddable
示例代码如下:
class Resource {
Long id;
@Embedded
GPU gpu;
CPU cpu;
}
abstract class GPU {
String name;
GpuType type;
}
class PhysicalGPU extends GPU {
}
class VirtualGPU extends GPU {
private int partition;
}
我有一个实体 Resource
,它有一个字段 GPU
,它是一个超级 class。它可以是 VirtualGPU
或 PhysicalGPU
。但是 JPA 或 Hibernate 似乎不支持 @Embedded
字段的 class 继承。并且创建没有继承的单个GPU类型或者创建PhysicalGPUResource
和VirtualGPUResource
来实现单个字段的继承是很难看的。
我认为作为 Resource
的描述符,使 GPU
成为单独 table 中的关联(并在 [= 中给出 ManyToOne
关系11=]) 也不是一个好的做法,但这将使继承可用。
我做了一些搜索,我想现在答案是否定的。但我仍然认为这对 Hibernate ORM 是一个相当大的要求,它可以在像 MyBatis
这样的框架中实现,Hibernate 不支持这种行为是很奇怪的。那么也许还有其他方法可以做到这一点?
我认为目前最好的方法是使用UserType。关注文章 Custom Types in Hibernate and the @Type Annotation 会很有帮助。
但是我还是不知道CompositeUserType
有什么好处。
示例代码如下:
class Resource {
Long id;
@Embedded
GPU gpu;
CPU cpu;
}
abstract class GPU {
String name;
GpuType type;
}
class PhysicalGPU extends GPU {
}
class VirtualGPU extends GPU {
private int partition;
}
我有一个实体 Resource
,它有一个字段 GPU
,它是一个超级 class。它可以是 VirtualGPU
或 PhysicalGPU
。但是 JPA 或 Hibernate 似乎不支持 @Embedded
字段的 class 继承。并且创建没有继承的单个GPU类型或者创建PhysicalGPUResource
和VirtualGPUResource
来实现单个字段的继承是很难看的。
我认为作为 Resource
的描述符,使 GPU
成为单独 table 中的关联(并在 [= 中给出 ManyToOne
关系11=]) 也不是一个好的做法,但这将使继承可用。
我做了一些搜索,我想现在答案是否定的。但我仍然认为这对 Hibernate ORM 是一个相当大的要求,它可以在像 MyBatis
这样的框架中实现,Hibernate 不支持这种行为是很奇怪的。那么也许还有其他方法可以做到这一点?
我认为目前最好的方法是使用UserType。关注文章 Custom Types in Hibernate and the @Type Annotation 会很有帮助。
但是我还是不知道CompositeUserType
有什么好处。