Hibernate 可以自动识别实体类型吗?
Can Hibernate automatically recognize an entity type?
我正在使用 Hibernate 和 Spring Data JPA 创建项目。我有一个名为 Product 的超类(具有价格等字段)和一些专门的子类,如内存、具有专门字段的处理器(所有类都不同)。所有产品都有单独的表格。
我的问题是:我可以多态地使用所有产品吗?比如
productRepository.update(product)
hibernate 会自动检测产品类型吗(这样它就可以将对象保存到适当的表中)?
我用了
@MappedSuperclass and @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
我的注释 Product class
- 这够了吗?
Hibernate 继承映射支持适合这种场景。在您的示例中,您不必调用:
productRepository.update(product);
除非您想附加一个分离的实体。
问题可能在于您需要具体实体 Spring 数据存储库。因此,您不能使用 productRepository
,而是使用 memoryRepository
和 processRepository
。
所以你可以获得一个Memory
实体:
Product memory = memoryRepository.findOne(1L);
如果您在同一个 Hibernate Session 中修改附加实体,dirty checking mechanism 会将更改与数据库同步。
如果实体被发送到 HTTP 会话并合并回另一个事务,那么您需要使用实际的存储库:
memoryRepository.save(memory);
您可以让您的存储库扩展一个接口,提供受支持的实体 class,然后使用 automatic scanning mechanism 来获得 Map<Class, CrudRepository>
,以便根据产品类型,您可以获取关联的存储库。
我正在使用 Hibernate 和 Spring Data JPA 创建项目。我有一个名为 Product 的超类(具有价格等字段)和一些专门的子类,如内存、具有专门字段的处理器(所有类都不同)。所有产品都有单独的表格。
我的问题是:我可以多态地使用所有产品吗?比如
productRepository.update(product)
hibernate 会自动检测产品类型吗(这样它就可以将对象保存到适当的表中)? 我用了
@MappedSuperclass and @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
我的注释 Product class
- 这够了吗?
Hibernate 继承映射支持适合这种场景。在您的示例中,您不必调用:
productRepository.update(product);
除非您想附加一个分离的实体。
问题可能在于您需要具体实体 Spring 数据存储库。因此,您不能使用 productRepository
,而是使用 memoryRepository
和 processRepository
。
所以你可以获得一个Memory
实体:
Product memory = memoryRepository.findOne(1L);
如果您在同一个 Hibernate Session 中修改附加实体,dirty checking mechanism 会将更改与数据库同步。
如果实体被发送到 HTTP 会话并合并回另一个事务,那么您需要使用实际的存储库:
memoryRepository.save(memory);
您可以让您的存储库扩展一个接口,提供受支持的实体 class,然后使用 automatic scanning mechanism 来获得 Map<Class, CrudRepository>
,以便根据产品类型,您可以获取关联的存储库。