Ma base de données contient 3 tables: les entités utilisateur et service ont une relation plusieurs-à-plusieurs et sont jointes à la table SERVICE_USER comme suit:
UTILISATEURS - SERVICE_USER - SERVICES
La table SERVICE_USER contient une colonne BLOCKED supplémentaire.
Quelle est la meilleure façon d'effectuer une telle cartographie? Ce sont mes classes d'entité
@Entity
@Table(name = "USERS")
public class User implements java.io.Serializable {
private String userid;
private String email;
@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}
.... some get/set methods
}
@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;
@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}
J'ai suivi cet exemple http://giannigar.wordpress.com/2009/09/04/m ... using-jpa / Voici un code de test:
User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");
CmsService service= new CmsService("cd2","name2");
List<UserService> userServiceList = new ArrayList<UserService>();
UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);
userDAO.save(user);
Le problème est que la mise en veille prolongée persiste l'objet User et UserService one. Aucun succès avec l'objet CmsService
J'ai essayé d'utiliser la récupération EAGER - aucun progrès
Est-il possible d'obtenir le comportement que j'attends avec le mappage fourni ci-dessus?
Peut-être existe-t-il un moyen plus élégant de mapper plusieurs à plusieurs tables de jointure avec une colonne supplémentaire?
@ElementCollection
des entités Utilisateur et Service (ou les deux).[userFK, serviceFK]
, utilisez une contrainte unique.Je recherche un moyen de mapper une table d'association plusieurs-à-plusieurs avec des colonnes supplémentaires avec mise en veille prolongée dans la configuration des fichiers xml.
En supposant qu'il existe deux tables 'a' et 'c' avec une association plusieurs à plusieurs avec une colonne nommée 'extra'. Parce que je n'ai trouvé aucun exemple complet, voici mon code. J'espère que cela aidera :).
Voici d'abord les objets Java.
Maintenant, nous devons créer la table d'association. La première étape consiste à créer un objet représentant une clé primaire complexe (a.id, c.id).
Créons maintenant l'objet d'association lui-même.
À ce stade, il est temps de mapper toutes nos classes avec la configuration hibernate xml.
A.hbm.xml et C.hxml.xml (la même chose).
Et puis le fichier de mappage d'association, a_c.hbm.xml.
Voici l'exemple de code à tester.
la source
Comme indiqué précédemment, avec JPA, pour avoir la possibilité d'avoir des colonnes supplémentaires, vous devez utiliser deux associations OneToMany, au lieu d'une seule relation ManyToMany. Vous pouvez également ajouter une colonne avec des valeurs générées automatiquement; de cette façon, il peut fonctionner comme clé primaire de la table, si cela est utile.
Par exemple, le code d'implémentation de la classe supplémentaire devrait ressembler à ceci:
la source