vru*_*uum 5 java eclipselink jpa-2.0
我目前正在努力将现有的数据库模式映射到jpa实体,并且在很多奇怪的事情中,我已经陷入了这个问题.
我有两个表,类似于:
Table 1 Table 2
|Service | |Servicetype |
|servicetype | |Servicecategory |
| | | |
Run Code Online (Sandbox Code Playgroud)
凡servicetype在表1是一个外键的服务类型表中的两个.但是,表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
Run Code Online (Sandbox Code Playgroud)
并且有4个类从此延伸,但是有一个不同的discriminatorvalue,哪个不起作用,因为我正在使用的eclipselink 试图在table1中查找servicecategory的值.
是否可以用jpa表达这样的映射,或者我应该where servicecategory = ?在每个查询中使用" "进行映射.
请在 EclipseLink 中提交增强文件以添加对此功能的支持。JPA 解决方案是将主表与辅助表进行切换 - 但这可能会导致插入顺序问题,并且外键将引用 table2 中的 Servicetype。
EclipseLink 特定的解决方案是使用定制器来更改用于鉴别器字段的表。将 @Customizer 标签添加到实体并指定带有方法的类:
public void customize(ClassDescriptor descriptor) {
descriptor.getInheritancePolicy().getClassIndicatorField().setTable(
descriptor.getTable("table2"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1202 次 |
| 最近记录: |