我目前正在努力将现有的数据库模式映射到 jpa 实体,并且在很多奇怪的事情中,我已经陷入了这个问题。
我有两个表,类似这样:
Table 1 Table 2
|Service | |Servicetype |
|servicetype | |Servicecategory |
| | | |
表一中的servicetype
是表二中服务类型的外键。
然而,表 1 中的服务根据它们属于哪个类别而具有截然不同的行为(虽然有 100 多种服务类型,但只有 4 个类别)
我希望能够根据服务类型的类别将表 1 映射到四个不同的实体类。
这是我目前所拥有的:
@Entity
@Table(name = "table1")
@DiscriminatorColumn(name = "servicecategory", discriminatorType =
discriminatorType.INTEGER)
@DiscriminatorValue("1")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@SecondaryTable(name = "table2",
pkJoinColumns =
@PrimaryKeyJoinColumn(name = "servicetype", referencedColumnName =
"servicetype"))
public class AbstractService implements Serializable {
...etc
还有 4 个类从此扩展,但具有不同的 discriminatorvalue
,这不起作用,因为我正在使用的 eclipselink 试图在表 1 中查找 servicecategory 的值。
是否可以用 jpa 表达这样的映射,或者我应该在每个查询中使用“where servicecategory = ?
”进行映射。
最佳答案
请在 EclipseLink 中提交增强文件以添加对此功能的支持。 JPA 解决方案是将主表与辅助表切换 - 这可能会导致插入顺序出现问题,并且外键将引用表 2 中的服务类型。
EclipseLink 特定的解决方案是使用定制器来更改用于描述符字段的表。将@Customizer 标签添加到实体中并指定一个带有方法的类:
public void customize(ClassDescriptor descriptor) {
descriptor.getInheritancePolicy().getClassIndicatorField().setTable(
descriptor.getTable("table2"));
}
关于java - 是否可以在 jpa 的辅助表上有鉴别器列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275578/