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

标签 java spring hibernate jpa spring-data

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

我的问题是:我可以多态地使用所有产品 - 就像

  productRepository.update(product) 

hibernate会自动检测od产品类型(这样它就可以将对象保存到适当的表中)吗? 我用过

@MappedSuperclass and @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

我的产品类中的注释 - 这足够了吗?

最佳答案

Hibernate继承映射支持适合这种场景。在您的示例中,您不必调用:

productRepository.update(product);

除非您想附加一个独立的实体。

可能的问题是您需要具体的实体 Spring Data 存储库。所以你不能有 productRepository但是一个memoryRepositoryprocessRepository相反。

这样你就可以获得Memory实体:

Product memory = memoryRepository.findOne(1L);

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

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

memoryRepository.save(memory);

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

关于java - Hibernate 可以自动识别实体类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818408/

相关文章:

java - 当我在 javafx 中使用 Parent As Node 时 TranslateTransition 显示白色背景

java - Mono 到 Flux 的 Spring 响应列表

java - 接缝测试 NoSuchMethodError

java - FetchType.LAZY 没有从数据库中获取对象

java - 无法使用 C3P0 在 Karaf 中创建 JPA 连接池

java - 我的jsp没有刷新

java - 使用多少线程更好? ( java )

java - 如何强制某些方法仅对 kotlin 可见

java - 如何保存过滤器参数。分页

java - Spring CrudRepository,Webservice,返回带有特定字符串的json对象