L'utilisation d'hibernate avec les génériques

Je vais avoir du mal à comprendre comment Hibernate traite avec les génériques et je me demandais la meilleure façon d'atteindre mon objectif.

Donné un simple générique de l'entité:

@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;
  }
}

Lorsque vous allez à travers hibernate initialisation, je suis l'exception: ...has an unbound type and no explicit target entity. Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type

Je suis presque certain c'est parce que je n'ai pas donné hibernate une liste de restrictions de ce <T> peut effectivement être. Je sais que vous pouvez spécifier des choses comme targetEntity=String.class ci-dessus t dans une annotation, mais alors vous perdez la flexibilité d'avoir des médicaments génériques. Puis-je limiter la portée de ce qui est acceptable générique à l'aide d'annotations? Par exemple: Que faire si je veux classes ChildA, ChildB, qui hérite d'une classe abstraite Parent à être permanent. En outre, il devrait également être en mesure d'accepter Strings. Peut Hibernate faire face à une telle chose?

Comment voulez-vous que Hibernate pour construire un tel objet générique? Il semble que vous devez avoir une sorte de colonne discriminante et d'identifier tous les objets qui pourraient être utilisés. Mais, je ne sais pas si c'est possible ici.
C'est exactement ce que je demande! 🙂

OriginalL'auteur Ryan | 2011-08-09