請看下面的例子:在子類中覆蓋@OneToMany targetEntity?
public interface Bar {
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public DefaultBar implements Bar {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private long id;
}
@Entity
public class Foo {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private long id;
@OneToMany(cascade = CascadeType.ALL, targetEntity = DefaultBar.class)
@JoinColumn(name = "FOO_ID")
private Collection<Bar> bars;
public Collection<Bar> getBars() {
return bars;
}
}
這會工作的所有權利。但 - 假設我將創建Foo的一個子類;說FooFoo。我希望「酒吧」協會也指向Bar的新實現。說:
@Entity
public NewBar extends DefaultBar {
}
現在我想註釋FooFoo,因此它將「bars」字段的目標實體設置爲NewBar類。
@Entity
@AssociationOverride(name="bars", ???????)
public class FooFoo extends Foo {
}
我注意到註解@AssociationOverride,但乍一看它不允許覆蓋目標實體。還是呢?
但是如何?數據庫中沒有外鍵從FooFoo到NewBar。 JPA實施者的詭計? –