JPA/Hibernate table de correspondance Un-à-plusieurs liens

Je suis en utilisant JPA et hibernate annotations seulement 4.0.1 que l'implémentation JPA.

J'ai unAssessmentclasse qui a deux ensembles de Comment:

@Entity
@Table(name = "ASSESSMENT")
public class Assessment{

    @OneToMany(fetch = FetchType.EAGER)
    private Set<Comment> auditComments = new HashSet<Comment>();

    @OneToMany(fetch = FetchType.EAGER)
    private Set<Comment> comments = new HashSet<Comment>();
}

(Je suis à sauter getters, setters, cascade de notes et d'autres pas pertinent de lignes de code)

Commentaire:

@Entity
@Table(name = "COMMENT")
public class Comment{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(columnDefinition = "text")
    private String text;
}

Présent, parce que Comment n'a pas de référence à Assessment (c'est fait exprès), je ne peux pas uset la mappedBy propriété et Hibernate a besoin de créer une table de correspondance entre Comment et Assessment. Par défaut, il est nommé ASSESSMENT_COMMENT.

Si j'avais un seul ensemble de Comment dans Assessment, qui fonctionne parfaitement bien. Le ASSESSMENT_COMMENT aurait seulement deux colonnes:

[ASSESSMENT_ID, COMMENT_ID]

qui représentent parfaitement l'un-à-plusieurs relations.

Maintenant, voici le problème:

Parce que je n'ai pas un jeu de Comment mais deux, Hibernate essaie de mapper les deux ensembles à l'aide de seulement un ASSESSMENT_COMMENT table. Ce tableau comporte 3 colonnes:

[ASSESSMENT_ID, COMMENT_ID, AUDITCOMMENT_ID]

En plus de cela, les 3 colonnes sont définies comme non nullable.

Qui ne peut certainement pas de travail. Par exemple, si j'ai qu'un seul élément dans auditComents et aucun dans les commentaires, hibernate essaie d'insérer une ligne avec une valeur null dans COMMENT_ID qui crée une exception SQL.

Questions:

Pour moi, il ressemble à un bug. Il devrait y avoir deux tables de mappage, pas un seul.

Donc, 1) est-ce un bug connu en veille prolongée? 2) est-il un moyen de contourner cela? Puis-je la force d'Hibernation pour créer deux tables de mappage, un pour chaque jeu. Gardez à l'esprit que je ne peux pas changer le Comment classe d'avoir une référence à Assessment (logique)

OriginalL'auteur phoenix7360 | 2012-12-14