2013-04-06 2 views
0

J'ai été très impressionné par mon projet, mais soudainement je remarque que je fais quelque chose de très mal, parce que chaque création, fusion, suppression, je le faisais manuellement, mais je devrais laisser le JPA s'occuper de moi.MySQL/JPA: Comment créer une relation correcte et une cascade?

Ce que je fais, c'est de créer la base de données puis de créer les entités à partir de celle-ci. Donc, here is my database afin que vous puissiez comprendre mon problème de concept.

D'une manière simple: Un user a un address, une seule adresse. Ce address est composé de city, state et country. Je veux être en mesure de créer, mettre à jour le user address en cascade.

Je pense que ma cartographie, générée par JPA est faux (ou mon understaing est faux), permettez-moi de le montrer:

public class User { 
    .. 
    //bi-directional many-to-one association to UserAddress 
    @ManyToOne(cascade = CascadeType.ALL) // should be one to one ? 
    @JoinColumn(name="id_user_address") 
    private UserAddress userAddress; 
    .. 
} 

public class UserAddress { 
    .. 

    //bi-directional many-to-one association to User 
    @OneToMany(mappedBy="userAddress", fetch=FetchType.EAGER) 
    private List<User> users; 

    //bi-directional many-to-one association to AddressCity 
    @ManyToOne 
    @JoinColumn(name="id_city") 
    private AddressCity addressCity; 

    //bi-directional many-to-one association to AddressState 
    @ManyToOne 
    @JoinColumn(name="id_state") 
    private AddressState addressState; 

    //bi-directional many-to-one association to AddressCountry 
    @ManyToOne 
    @JoinColumn(name="id_country") 
    private AddressCountry addressCountry; 
    .. 
} 

Ce que je pense est que le user a one adress only, il devrait donc être OneToOne cartographie ? Et il en va de même pour UserAdress environ country, state et city.

Répondre

1

Si vous voulez autoriser plusieurs utilisateurs sur la même adresse, @ManyToOne est ce que vous voulez. Si vous utilisez @OneToOne, vous ne pouvez avoir qu'un seul utilisateur par adresse.

+0

@Elke, c'est ce que je veux, un utilisateur a une seule adresse, mais je ne sais pas comment le faire .. –

+1

Ce que vous avez est correct et fait ce que vous voulez. ManyToOne et OneToOne vous donnent une seule adresse par utilisateur. La différence est dans le nombre d'utilisateurs par adresse. En raison du fait que vous avez une liste d'utilisateurs dans votre entité UserAddress, vous voulez un mappage ManyToOne dans votre entité User. – Eelke

+0

Maintenant je l'ai eu. Merci mec! –

Questions connexes