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
.
@Elke, c'est ce que je veux, un utilisateur a une seule adresse, mais je ne sais pas comment le faire .. –
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
Maintenant je l'ai eu. Merci mec! –