Использование спящего режима с дженериками

У меня возникли некоторые проблемы с пониманием того, как 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 справиться с такими вещами?

15
задан Ryan 9 August 2011 в 17:42
поделиться