我有一个非常具体的问题。在我的代码库中,我有一些继承自SuperClass
的类,两个特定的类具有ComplexRelationship
多对多关系类型。对于同一对(ClassA, ClassB)
,此关系可能会多次出现,因此我无法将其用作主键。
我按以下方式构建了类:
@Entity(name = "SuperClass")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class SuperClass {
//...
}
@Entity(name = "ClassA")
public class ClassA extends SuperClass {
@OneToMany(fetch = FetchType.LAZY)
List<ClassB> manyComplexRelationships;
//...
}
@Entity(name = "ClassB")
public class ClassB extends SuperClass {
@OneToMany(fetch = FetchType.LAZY)
List<ClassA> manyComplexRelationships;
//...
}
@Entity(name = "complexrelationship")
public class ComplexRelationship {
@Id @GeneratedValue Long id;
@ManyToOne
ClassA classA;
@ManyToOne
ClassB classB;
// other attributes to be persisted
//...
}
正如您所看到的,SuperClass
被定义为使用SINGLE_TABLE
层次结构,并且我试图懒洋洋地加载ComplexRelationship
个集合。然而,经过大量的反复试验,我发现spring正在创建关系表:
create table complexrelationship_superclass
(classa_id not null, complexrelationship_id not null, classb_id not null)
create table complexrelationship (id, classa_id, classb_id, ...)
正如您所看到的,complexrelationship_superclass
表应该是这些类的@ManyToOne
关系表,但它有三列而不是通常的两列 - 可能是由于使用了{{ 1}}。
所以,我的问题是
SINGLE_TABLE
层次结构?使用Spring Boot v 1.5.8.RELEASE
提前谢谢。