Bonsoir,
je mets en place une architecture à base de Spring - JPA - Hibernate et j'ai probablement un cas d'école que je n'arrive pas à résoudre car je suis un débutant sur l'utilisation des ORM.
Voici ma problématique :
J'ai une entity qu'on va appeler "User" et une autre qu'on appellera "Right".
En base, la table User a un login, un password mais surtout une clé étrangère pointant sur la table des droits Right.
J'ai réalisé une génération automatique des entity via Hibernate Tools, j'ai donc "théoriquement" mes model, ma couche DAO et ma couche de Service.
Je voudrais donc tester le service qui met à jour la liste des utilisateurs (ajout, suppression, selection...)
Or, je suis totalement paumé avec ces histoires de relation...
Si qqun pouvait me filer un coup de main, ou bien un lien avec un bon tuto, ca serait vraiment sympa.
Voici un extrait de mon source :
USER
RIGHT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 @Entity @Table(name = "USER", uniqueConstraints = @UniqueConstraint(columnNames = "USR_LOGIN")) public class UserAccount implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "USR_ID") @TableGenerator(name="appSeqStore", table="APP_SEQ_STORE", pkColumnName="AST_SEQ_NAME", pkColumnValue = "USER.USR_ID", valueColumnName = "AST_SEQ_VALUE") @GeneratedValue(strategy=GenerationType.TABLE, generator="appSeqStore") private Integer id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "USR_RGT_ID", nullable = false) private UserRight userRight; @Column(name = "USR_NAME", length = 50) private String name; @Column(name = "USR_LOGIN", unique = true, nullable = false, length = 20) private String login; .... getter & setter
J'ai retouché un peu les class pour pouvoir gérer les ID avec une stratégie de gestion dans une table (je ne peux pas faire d'auto incrémentation).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 @Entity @Table(name = "RIGHT", uniqueConstraints = @UniqueConstraint(columnNames = "RGT_RIGHTS")) public class UserRight implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "RGT_ID") @TableGenerator(name="appSeqStore", table="APP_SEQ_STORE", pkColumnName="AST_SEQ_NAME", pkColumnValue = "RIGHT.RGT_ID", valueColumnName = "AST_SEQ_VALUE") @GeneratedValue(strategy=GenerationType.TABLE, generator="appSeqStore") private Integer id; @Column(name = "RGT_RIGHTS", unique = true, nullable = false, length = 20) private String rights; @Column(name = "RGT_COMMENTS", length = 4000) private String comments; @OneToMany(fetch = FetchType.LAZY, mappedBy = "UserRight") private Set<UserAccount> users = new HashSet<UserAccount>(0);
Par contre, j'ai du mal à comprendre comment je dois instancier mes objets dans mes tests unitaires. Je ne sais même pas si ces entités JPA sont fonctionnelles....
Imaginons un cas simple : ma table RIGHT est déjà initialisée avec des droits ADMIN, REDACTEUR, CONSULTANT.
Comment créer un nouvel utilisateur dans mon test JUnit ?
Dois je utiliser la DAO pour faire un getByType afin de récupérer l'objet RIGHT que je veux affecter à mon USER ?
Un truc du style :
J'avoue que je trouve cela un peu lourd si c'est le cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 @Test public void testAddUser() { UserRight userRight = userRightService.getByType("ADMIN"); UserAccount userAccount = userAccountService.add("my_user", userRight); }
Un grand merci par avance à ceux qui pourront m'apporter qq réponses.
Partager