我设计的此结构的映射存在问题
public abstract class A<T> {
private int discriminator_value = -1;
private T value;
//...
}
public class One extends A<String> {
public One(){
setDiscriminatorValue(1);
}
//...
}
public class Two extends A<BigDecimal> {
public Two(){
setDiscriminatorValue(2);
}
//...
}
public class Three extends A<Date> {
public Three(){
setDiscriminatorValue(3);
}
//...
}
public class TheTargetSolution {
private Long info1;
private Long info2;
private Long info3;
private A targetPojo;
//...
}
表结构
THE_TARGET_SOLUTION_TABLE
- INFO_1 NUMBER(10)
- INFO_2 NUMBER(10)
- INFO_3 NUMBER(10)
- DISCRIM NUMBER(2)
- TEXT_A NVARCHAR2(200 BYTE)
- NUMBER_A NUMBER(10)
- DATE_A DATE
最主要的是,我们需要在TheTargetSolution中拥有A类类型的targetPojo,并且该类没有映射,(在这种情况下,我们需要更多的实体信息,并且thees不能使用多对多关系来做到这一点所有数据都必须存储在一个表中),该表是适用于区分符的类型的实例。
正在恢复
当DISCRIM列的值为1时,targetPojo的类型应为One
当DISCRIM列的值为2时,targetPojo应为2类型
当DISCRIM列的值为3时,targetPojo的类型应为3
有什么建议么 ?
最佳答案
这是inheritance的典型方案,具有每个表类的层次结构。如果您使用xml,请参阅链接的文档。如果使用注释,请使用
@MappedSuperclass
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISCRIM", discriminatorType=INTEGER)
public abstract class A {
// properties here
}
然后
@Entity
@DiscriminatorValue("1")
public class Two extends A<BigDecimal>