gpt4 book ai didi

java - 如何在JPA中显式指定 'inverse' @OneToMany关系

转载 作者:太空宇宙 更新时间:2023-11-04 07:09:24 25 4
gpt4 key购买 nike

我使用 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”类型?如果这是不可能的,那么在仍然使用鉴别器的情况下,我有什么替代方案来设置这种逆关系?

最佳答案

OneToMany注解可以指定targetEntity:

  @OneToMany(mappedBy="foo", targetEntity = Type.class)
Set<?> types;

当泛型可用于定义类型时,这是可选的,但在您的情况下是必需的。

http://docs.oracle.com/javaee/6/api/javax/persistence/OneToMany.html

关于java - 如何在JPA中显式指定 'inverse' @OneToMany关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com