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,而是使用 memoryRepositoryprocessRepository

所以你可以获得一个Memory实体:

Product memory = memoryRepository.findOne(1L);

如果您在同一个 Hibernate Session 中修改附加实体,dirty checking mechanism 会将更改与数据库同步。

如果实体被发送到 HTTP 会话并合并回另一个事务,那么您需要使用实际的存储库:

memoryRepository.save(memory);

您可以让您的存储库扩展一个接口,提供受支持的实体 class,然后使用 automatic scanning mechanism 来获得 Map<Class, CrudRepository>,以便根据产品类型,您可以获取关联的存储库。