经过大量测试,试图让 Java 参数化与抽象父表(单表继承)和抽象子表(每类一个表继承)一起工作,我放弃了。
这可能是可能的,但是当 Hibernate 尝试将抽象(参数化)类实例化为实体时,您经常会遇到问题。这是当您收到错误“A 具有未绑定的类型且没有明确的目标实体”时。这意味着 Hibernate 没有参数化类型的参数值。我发现扩展类的测试很好,但是围绕父实体的测试会中断。
我建议使用 JPA 继承重写它,将参数化的东西向下移动到扩展类中。这样你就可以从数据库中得到相同的多态性。
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "CLASS_TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class ClassA {
[...]
}
扩展 B:
@Entity
@DiscriminatorValue=("B")
public class ClassB extends ClassA {
@OneToOne
@JoinColumn(name = "mycolumn_id")
private Integer instance;
[...]
}
扩展 C:
@Entity
@DiscriminatorValue=("C")
public class ClassC extends ClassA {
@OneToOne
@JoinColumn(name = "mycolumn_id")
private String instance;
[...]
}