我设计的这个结构的映射存在问题
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,并且这个类没有映射,(我们需要更多的信息来实体,而且他们没有选择使用多对多的关系来做到这一点在这种情况下,所有数据都必须存储在一个表中,该表是适用于鉴别器的类型的实例。
恢复
当DISCRIM列值为1时,targetPojo的类型应为One
当DISCRIM列值为2时,targetPojo的类型应为Two
当DISCRIM列值为3时,targetPojo应为3的类型
有什么建议吗?
答案 0 :(得分:1)
这是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>
答案 1 :(得分:1)
看看这个:https://github.com/candybon/fasttrack 它提供了一个解决方案,将所有的pojo合作到一个表中