Hibernate可以自动识别实体类型吗?

时间:2015-01-07 11:25:51

标签: java spring hibernate jpa spring-data

我正在使用Hibernate和Spring Data JPA创建项目。我有一个名为Product的超类(带有价格等字段)和一些专门的子类,如Memory,带有专用字段的处理器(所有类都不同)。所有产品都有单独的表格。

我的问题是:我可以使用polimorphically的所有产品 - 比如

  productRepository.update(product) 

并将hibernate自动检测类型od产品(因此它可以将对象保存到适当的表)? 我用了

@MappedSuperclass and @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
我的Product class中的

注释 - 这还够吗?

1 个答案:

答案 0 :(得分:2)

Hibernate继承映射支持适用于此场景。在您的示例中,您不必致电:

productRepository.update(product);

除非你想附加一个分离的实体。

可能存在的问题是您需要具体的实体Spring Data存储库。因此,您不能拥有productRepository而是memoryRepositoryprocessRepository

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

Product memory = memoryRepository.findOne(1L);

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

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

memoryRepository.save(memory);

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