Hibernate 每个混凝土类继承的混合连接和表格
我有A、B、C、D、E和F班,其中 B从A延伸,C从B延伸 D从A延伸,E从D延伸 F从A扩展而来 我想在A和表中使用联接继承策略,从B、D和F级别使用每个具体类的继承策略。 A、 B和D是抽象类,C、E和F是具体类 这是否可能?如果可能,我们应该如何做。当我尝试时,我最终得到了所有6个类的独立表,我希望创建4个表(分别为A和C、E和F创建一个表) 我在类A中使用了@heritance(strategy=heritancetype.JOINED),并且 @类B、D和F中的继承(策略=InheritanceType.TABLE_PER_CLASS) 我已经看到了混合每个层次表和联合继承策略的示例,但我想实现上面提到的内容,而不使用每个层次表 请帮助我。每个具体类的表”和“连接的子类”策略不能混合使用,因为它们相互排斥:Hibernate 每个混凝土类继承的混合连接和表格,hibernate,inheritance,jpa,Hibernate,Inheritance,Jpa,我有A、B、C、D、E和F班,其中 B从A延伸,C从B延伸 D从A延伸,E从D延伸 F从A扩展而来 我想在A和表中使用联接继承策略,从B、D和F级别使用每个具体类的继承策略。 A、 B和D是抽象类,C、E和F是具体类 这是否可能?如果可能,我们应该如何做。当我尝试时,我最终得到了所有6个类的独立表,我希望创建4个表(分别为A和C、E和F创建一个表) 我在类A中使用了@heritance(strategy=heritancetype.JOINED),并且 @类B、D和F中的继承(策略=Inheri
- C使用“每个混凝土等级的表”,因此应将A、B、C的所有属性映射到“C_表”
- A正在使用“连接的子类”,因此应该将其自身的所有属性映射到“A_表”
您现在已将数据复制到两个表中。对E和F重复这一点,它有4个表。这有点晚了,但我最近遇到了类似的问题。我找到的解决方案是在抽象类上使用@MappedSuperclass注释,您不需要为抽象类使用单独的表 比如说,
@Entity(name = "A")
@Inheritance(strategy = InheritanceType.JOINED)
public class A {
// mapped fields that go into parent A table
}
@MappedSuperclass
public class B extends A {
// fields that should get pushed down to tables that inherit from B
}
@MappedSuperclass
public class D extends A {
// fields that should get pushed down to tables that inherit from D
}
@Entity(name = "F"
public class F extends A {
// fields that are specific to table F
}
@Entity(name = "C")
public class C extends B {
// fields that are specific to table C
}
@Entity(name = "E")
public class E extends D {
// fields that are specific to table E
}
这假设您在@MappedSuperclass
类中应用的映射(特别是列名)对于子类表是相同的。如果不是,则需要在类上使用@AttributeOverride
注释。比如说,
@MappedSuperclass // this insures that no table is created for this class, but that the mapped fields are pushed down to the subclasses.
public class B extends A {
@Id @Generated
@Column(name = "myId")
public int myId;
}
@Entity(name = "C")
@AttributeOverride(name = "myId", column = @Column(name = "ID"))
public class C extends B {
}