У меня возникли некоторые проблемы с пониманием того, как Hibernate работает с универсальными шаблонами, и мне было интересно, как лучше всего достичь моей цели.
Учитывая простую универсальную сущность:
@Entity
public class Box<T>{
private T t;
@Id
private long id;
public void setT(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setId(long id) {
this.id = id;
}
public long getId() {
return id;
}
}
При прохождении через при инициализации hibernate, я получаю исключение: ... имеет несвязанный тип и не имеет явной целевой сущности. Решите эту общую проблему использования или установите явный целевой атрибут (например, @OneToMany (target =) или используйте явный @Type
Я почти уверен, что это потому, что я не предоставил гибернации список ограничений того, что
на самом деле может быть. Я знаю, что вы можете указать такие вещи, как targetEntity = String.class
выше t
в аннотации, но тогда вы теряете гибкость использования универсальных шаблонов . Могу ли я ограничить с помощью аннотаций рамки приемлемого универсального типа? Например: Что, если мне нужны классы ChildA
, ChildB
, которые наследуются от абстрактного класса Parent
. Кроме того, он также должен иметь возможность принимать String
s. Может ли Hibernate
справиться с такими вещами?