Question

Nous utilisons Hibernate Annotations 3.4.0GA et Hibernate Core 3.3.2.GA (également connu sous les versions stables actuelles) contre une base de données Oracle

Nous avons une cartographie One-to-Many avec base = 1 qui a bien fonctionné pendant un certain temps looooooongues, mais la semaine dernière, nous avons trouvé quelques entrées dans la base de données où la colonne d'index contenait une valeur de 0, ce qui a causé toutes sortes de problèmes.

Alors ma question est la suivante: Quelqu'un sait-il d'un moyen d'obtenir une valeur de 0 dans la colonne d'index d'un à plusieurs, quand il est mis en correspondance avec une base = 1? Peut-être en rapport avec les génériques d'utilisation ou MappedSuperclass.

Notez que le code est assez complexe, car l'héritage est impliqué aussi bien.

Les éléments suivants sont les éléments pertinents des classes:

// SuperClass of the One side
@MappedSuperclass
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>>
{
  @OneToMany(cascade = CascadeType.ALL)
  @Cascade(
  {
      org.hibernate.annotations.CascadeType.ALL,
      org.hibernate.annotations.CascadeType.DELETE_ORPHAN
  })
  @JoinColumn(name = "parent_id", nullable = false)
  @IndexColumn(name = "position", base = 1, nullable = false)
  private List<Te> elements = new ArrayList<Te>();
}

// Super Class of the Many side
@MappedSuperclass
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject
{
  @ManyToOne
  @JoinColumn(name = "parent_id", insertable = false, updatable = false, nullable = false)
  private Tp parent;

  @Column(name = "position", insertable = false, updatable = false, nullable = false)
  private int position;
}

Les classes réelles héritent de ces derniers et fournissent des classes concrètes pour les paramètres de type. Ils sont mis en correspondance comme entité. Ils précisent également id et les colonnes de version ainsi que des tonnes d'autres attributs et références, mais rien lié à la mise en correspondance à portée de main.

Était-ce utile?

La solution

Je sais que ça fait presque deux ans, mais je suis tombé sur ce tout en recherchant une solution pour le même problème. Nous utilisons HBM via des fichiers xml, donc je ne suis pas sûr que cela vous aidera. Dans notre cas, le problème a été la mise en correspondance inverse. Si le contrôle de la liste (et l'index) était sur le côté liste éléments (le « beaucoup ») comme dans votre cas, nous avons eu le problème. Se déplacer vers le haut résolu cela. Je ne sais pas comment cela se fait avec annotations.

Une autre source de l'erreur peut être si vous définissez acctually « éléments » sur votre objet AbstractReihung. Hibernate utilise des objets proxy pour les propriétés chargées paresseux. Si vous définissez une nouvelle collection entière au lieu de modifing l'existant vous écrasez l'objet proxy.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top