我正在映射一个遗留数据库,其中一个表使用SINGLE_TABLE
使用鉴别器列的映射自然地映射到继承层次结构。问题是有大量的鉴别器值!(此外,偶尔会添加新的,应用程序应该在多态查询中自动选择它们)。从我的应用程序的角度来看,我想以相同的方式对待绝大多数这些不同类型(即,只需将它们映射到继承层次结构中的基类)。但是,对于少数人,我想映射到特定的子类。问题是 JPA 似乎要求我在基类上提供一个特定@DiscriminatorValue
的(否则它会生成一个默认的)。
具体来说:
@Entity
@Table("products")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "product_type")
@DiscriminatorValue( *anything not specified elsewhere!* )
public class Product {
...
public double calculateMarkup() { ... default impl ... }
}
@Entity
@DiscriminatorValue("ProductA")
public class ProductA extends Product {
...
@Override public double calculateMarkup() { ... specific impl ... }
}
有没有办法在 JPA(或 Hibernate 3.3 特定的扩展)中优雅地映射它?我能想到的唯一解决方案是放弃继承并将列映射为一个普通字段,在内部为特殊情况切换该值,但这感觉不自然而且有点脏。