Я использую JPA дискриминаторы для получения конкретных классов суб следующим образом (имена классов изменены для простоты)Как явно указать «обратную» связь @OneToMany в 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
Как вы можете видеть класс «Тип» в многие-к-одному с классом Foo, однако в дженериков как Set<Type1>
не является подтипом Set<Type>
мы не можем просто speicify на «обратную» связь в Foo, как Set<Type> types;
Поэтому мой класс Foo использует символы, но и гарантирует, что только подклассы типа могут быть установлены как типы следующим образом;
@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 должен быть типа «Тип»? Если это невозможно, каковы мои альтернативы настройке этой обратной связи, но при этом используются дискриминаторы?