J'ai une classe Hibernate appelée Expression (simplifiée ici pour votre plaisir visuel):Mise en veille prolongée crée deux clés primaires quand je veux une seule
@Entity
public class Expression {
@Id
@GeneratedValue
private long id;
private String data;
@OneToMany(fetch=FetchType.EAGER)
@Cascade({CascadeType.MERGE, CascadeType.PERSIST})
private Set<Expression> dependencies;
}
Cela crée deux tables, Expression(id, data)
et Expression_Expression(expression_id, dependencies_id)
. Cependant, Hibernate définit les colonnes expression_id et dependencies_id comme clé primaire, donc je ne peux pas avoir de doublons dependencies_id, ce que je voudrais.
Par exemple, si j'ai trois expressions:
Expression x = new Expression("0");
Expression y = new Expression("1");
Expression z = new Expression("x + y");
Set<Expression> tmp = new HashSet<Expression>();
tmp.add(x);
tmp.add(y);
z.setDependencies(tmp);
// Persist x, y, and z.
Hibernate va effectuer les opérations suivantes:
Insérer x
dans la table Expression
avec id = 1 et data = "0"
Insérer y
dans le tableau Expression
avec id = 2 et data = "1"
Insérez z
dans le tableau Expression
avec id = 3 et data = "a + b »
insérer une ligne dans la table 'Expression_Expression' avec expression_id = 3 et dependencies_id = 1. (Making z
à la charge d'x
.)
Mais lorsqu'il tente d'insérer une ligne dans la table Expression_Expression
avec expression_id = 3 et dependencies_id = 2 (rendant z
dans une personne à charge de y
) Je reçois une erreur d'entrée en double.
J'aimerais pouvoir avoir plusieurs lignes dans le tableau Expression_Expression
avec la même valeur expression_id
.
Toute aide serait grandement appréciée!