我使用 JPA 判别器来获取特定子类,如下所示(为简单起见,更改了类名)
@Entity
@Table(name="TYPE")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="SUB_TYPE", discriminatorType=DiscriminatorType.INTEGER)
public class Type {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="TID")
private Foo foo;
}
@Entity
@DiscriminatorValue("1")
public class Type1 extends Type {
//Type1 stuff
}
//Other Type subclasses
如您所见,“Type”类与 Foo 类处于多对一关系,但在泛型中为 Set<Type1>
不是 Set<Type>
的子类型我们不能仅仅将 Foo 中的“逆”关系指定为 Set<Type> types;
因此我的 Foo 类使用通配符,但也确保只有 Type 的子类可以设置为类型,如下所示;
@Entity
@Table(name="FOO")
public class Foo {
//bi-directional one-to-many association to Type
@OneToMany(mappedBy="foo")
Set<?> types;
public Set<?> getTypes() {
return types;
}
public void setTypes(Set<? extends Type> types) {
this.types = types;
}
}
问题是 - 我如何明确告诉 JPA Set 应该是“Type”类型?如果这是不可能的,那么在仍然使用鉴别器的情况下,我有什么替代方案来设置这种逆关系?
我是一名优秀的程序员,十分优秀!