让“A”成为具有 TABLE_PER_CLASS 继承策略的基础实体。让“B”和“C”成为“A”的实体子类。让“D”成为与“A”具有@ManyToOne 关系的实体。让“A”与“D”具有@OneToMany 关系。实体类如下:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class A {
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "a_sequence_generator")
@SequenceGenerator(name = "a_sequence_generator", sequenceName = "sequence_a")
@Column(name = "id", nullable = false, unique = true)
private Long id;
@OneToMany(mappedBy = "a")
private List<D> dlist;
// other fields and methods
}
@Entity
public class B extends A {
// fields and methods specific to B
}
@Entity
public class C extends A {
// fields and methods specific to C
}
@Entity
public class D {
@ManyToOne
@JoinColumn(name = "a_id")
private A a;
// other fields and methods
}
在这种情况下,表“A”、“B”、“C”和“D”的变更集应该是什么样的?令我困惑的是@ManyToOne 映射。由于使用了@JoinColumn,“a_id”必须是有效列,这意味着“A”表需要创建,即使它永远无法实例化。
我们可以避免创建“A”表吗?