2011-11-18 7 views
1

Je suis actuellement coincé dans la situation suivante:JPA - numéro Cascade

Quand mon JSF - bottes projet JPA pour la première fois, il auto crée un utilisateur admin et il donne l'userType admin:

User user = new User(); 
       UserType userType = new UserType(); 
       user.setUsername("admin"); 
       user.setPassword("admin"); 
       userType.setName("admin"); 
       user.setUserType(userType); 
       create(user); 
       return user; 

Alors que le code crée un utilisateur et un type d'utilisateur dans la base de données.

Cependant, quand je veux attribuer un userType à un utilisateur lors de l'exécution de mon projet, je reçois une erreur « Transaction Aborted » avec les éléments suivants Stacktrace

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504):  org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception:  com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry  'admin' for key 'NAME' 
Error Code: 1062 
Call: INSERT INTO USERTYPE (NAME) VALUES (?) 
bind => [1 parameter bound] 
Query: InsertObjectQuery([email protected]) 

code ressemble à ceci

@JoinColumn(nullable=false) 
    @OneToOne(cascade = {CascadeType.PERSIST}) 
    protected UserType userType; 

Si déjà essayé toutes les autres différentes CascadeTypes mais aucun d'entre eux pris en charge à la fois les choses que je veux faire ...

Répondre

0

MySQLIntegrityConstraintViolationException: entrée en double
'admin' pour le code d'erreur 'NOM' clé: 1062

de ce message, je suppose que vous avez déjà un enregistrement dans votre table UserType avec le nom = admin?

La cascade fonctionne correctement, puisque nous avons vu l'instruction insert into usertype.

Il est intéressant de savoir pourquoi user-> usertype est one2one. Habituellement, ce serait @ManyToOne. Eh bien, il aurait quelque chose à voir avec votre exigence, peut-être que votre application doit être one2one. juste se sentir étrange.