我设计的此结构的映射存在问题

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


最主要的是,我们需要在T​​heTargetSolution中拥有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>

10-01 08:40
查看更多