2011-04-07 4 views
0

Je travaille dans un projet utilisant Hibernate + JPA. J'ai cette classe entité:@OneToOne relations hibernate question

@Entity 
public class CafeUser implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer userId; 
    @Column  
    private String userName; 
    @Column 
    private String userPassword; 
    @Column(unique=true) 
    private String userEmail; 
    @Column 
    private String userAddress; 
    @Column 
    private String userCountry; 
    @Column 
    private String userState; 
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime") 
    private DateTime userDateOfBirth; 
    @Column 
    private String userSex; 

    @OneToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name="userAccountingDetailsId", referencedColumnName="userAccountingDetailsId") 
    private AccountingDetails accountingDetails; 

    @OneToOne(cascade=CascadeType.ALL) 
    private InvestorProfile investorProfile; 

    @OneToMany(mappedBy="user") 
    private Set<UserProfileAnswer> userProfileAnswers; 

    @OneToMany(cascade=CascadeType.ALL, mappedBy="user") 
    private Set<MoneyHealth> userMoneyHealths; 

    @OneToMany(cascade=CascadeType.ALL, mappedBy="user") 
    private Set<LifePlanning> lifePlannings; 

    getters-setters 
} 

Si vous pouvez le voir, le USEREMAIL de champ est déclaré comme unique, et s'il y a un double de l'entité CafeUser dans le DB, il n'insère pas l'entité. MAIS, les champs "investorProfile" et "accountingDetails" sont insérés même s'ils sont associés à un utilisateur ayant un email déjà enregistré dans la base de données.

Qu'est-ce que je fais mal ??

Merci d'avance!

Répondre

0

Définissez la propriété hibernate hibernate.show_sql sur true et consultez les instructions SQL générées. Vérifiez également si vous faites la persistance dans la transaction.

+1

Je persiste à travers l'EntityManager, et oui, je persiste dans la transaction. Dois-je annuler la transaction lorsqu'une exception PersistenceException est interceptée pendant persist()? –

0

Résolu. J'ai mal interprété la relation @OneToOne. Maintenant, l'investorProfile et AccountingDetails détient une clé pour un utilisateur et tout est défini.