我目前正在努力将现有的数据库架构映射到jpa实体,并且在很多奇怪的事情中,我已经陷入了这个问题。
我有两张桌子,类似于:
Table 1 Table 2
|Service | |Servicetype |
|servicetype | |Servicecategory |
| | | |
表1中的servicetype
是表2中服务类型的外键。
但是,表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试图在table1中查找servicecategory的值。
是否可以用jpa表达这样的映射,或者我应该在每个查询中使用“where servicecategory = ?
”进行映射。
答案 0 :(得分:1)
请在EclipseLink中提交增强功能以添加对此功能的支持。 JPA解决方案是将主表与辅助表切换 - 这可能会导致插入顺序出现问题,而外键将引用表2中的Servicetype。
EclipseLink特定解决方案是使用自定义程序更改用于descriminator字段的表。将@Customizer标记添加到实体并使用方法指定类:
public void customize(ClassDescriptor descriptor) {
descriptor.getInheritancePolicy().getClassIndicatorField().setTable(
descriptor.getTable("table2"));
}