Bonjour,
Ma question concerne plus la manière de faire ou les bonnes pratiques à utiliser que la technique.
J'ai les tables suivantes:
Usr
Talks
IsTalking
La table IsTalking permet d'avoir une discussion(Talks) partagée entre plusieurs utilisateurs(Usr) et chaque utilisateur peut suivre plusieurs discutions.
Débutant en EJB3, je me suis servi du plugin jbosstools pour eclipse afin de générer mes ejbs à partir de ma base de données.
Usr.java
Talks.java
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 @Entity @Table(name = "usr", catalog = "agenda") public class Usr implements java.io.Serializable { private Set<IsTalking> isTalkings = new HashSet<IsTalking>(0); .... @OneToMany(fetch = FetchType.LAZY, mappedBy = "usr") public Set<IsTalking> getIsTalkings() { return this.isTalkings; } public void setIsTalkings(Set<IsTalking> isTalkings) { this.isTalkings = isTalkings; } }
IsTalking.java
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 @Entity @Table(name = "talks", catalog = "agenda") public class Talks extends GenericEntity implements java.io.Serializable { private Set<IsTalking> isTalkings = new HashSet<IsTalking>(0); ..... @OneToMany(fetch = FetchType.LAZY, mappedBy = "talks") public Set<IsTalking> getIsTalkings() { return this.isTalkings; } public void setIsTalkings(Set<IsTalking> isTalkings) { this.isTalkings = isTalkings; } }
Lorsque je veux avoir la liste des discussions pour un utilisateurs, ou dois je placer ma requete:
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 @Entity @Table(name = "is_talking", catalog = "agenda") public class IsTalking extends GenericEntity implements java.io.Serializable { private Talks talks; private Usr usr; ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TALKS_PK", nullable = false) public Talks getTalks() { return this.talks; } public void setTalks(Talks talks) { this.talks = talks; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "USR_PK", nullable = false) public Usr getUsr() { return this.usr; } public void setUsr(Usr usr) { this.usr = usr; } }
Dans le dao de talks et passer par la table de liaison:
Avec Hibernate:
Ou bien dans le dao de IsTalking mais je ne sais pas comment faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public List<Talks> findByUsr(Integer usrPK){ return sessionFactory.getCurrentSession().createCriteria(Talks.class). addOrder(Order.desc("lastMessage")) .createAlias("isTalkings","it") .createAlias("it.usr", "usr") .add(Restrictions.eq("usr.pk", usrPK)) .list(); }
Si on utilise la première méthode, les dao de IsTalking ne servent donc qu'a faire des créations et des suppressions ?
Il y a t'il une meilleure manière de faire?
Merci par avance.
Partager