Bonjour,

J'ai un soucis avec une classe annotée jpa. ( je débute ... )
Environnement: Java6, JPA2 / Hibernate, Jboss. On part d'une base de donnée oracle10 existante.

Mon entité principale contient 3 clés proventant de la DB et 2 entités liées à ces deux clés:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
@Entity
@Table(name="MATOS_USERDPT")
public class MatosUserdpt implements Serializable {
	private static final long serialVersionUID = 1L;
 
	@Id
	@Column(name="MU_ID")
	private Long muId;
 
	@Column(name="MU_LOCID")  // Lié à une autre table
	private Long muLocid;
 
	@Column(name="MU_USERID") // lié à une autre table
	private Long muUserid;
 
//  association Matos_loc
	@OneToOne
	@JoinColumn(name="MU_LOCID", referencedColumnName="ML_ID",insertable=false, updatable=false)
	private MatosLoc matosloc;
 
//  association PhilinkUser
	@OneToOne
	@JoinColumn(name="MU_USERID", referencedColumnName="PU_SERIAL",insertable=false, updatable=false)
	private PhilinkUser philinkUser;
... Getters/Setters
}
 
@Entity
@Table(name="MATOS_LOC")
@SequenceGenerator(name="MATOSLOC_SEQ_GEN", sequenceName = "matosloc_seq")
public class MatosLoc implements Serializable {
	private static final long serialVersionUID = 1L;
 
	@Id
	@Column(name="ML_ID")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "MATOSLOC_SEQ_GEN")
	private long mlId;
 
         ... Getters/Setters
}
 
@Entity
@Table(name="PHILINK_USER")
public class PhilinkUser implements Serializable {
	private static final long serialVersionUID = 1L;
 
	...
	@Id
	@Column(name="PU_SERIAL")
	private Long puSerial;
 
         ... Getters/Setters
}
Voici la méthode qui effectue la recherche
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
 
@Override
	public List<E> findByExample(E exampleInstance, int startitem,
			int maxitems, boolean ignoreCase) {
 
		org.hibernate.Session hibernateSession = (Session) em.getDelegate();
 
		Example expl = Example.create(exampleInstance).excludeZeroes();
		if (ignoreCase)
			expl.ignoreCase();
		expl.enableLike(MatchMode.ANYWHERE);
 
		Criteria criteria = hibernateSession.createCriteria(this.entityClass)
				.add(expl);
		if (startitem >= 0)
			criteria.setFirstResult(startitem);
		if (maxitems > 0)
			criteria.setMaxResults(maxitems);
 
		return criteria.list();
	}
Bon, Si je prends l'sql généré par Hibernate et que je l'exécute manuellement j'ai le résultat escompté ( pour rendre lisible j'ai remplacé this_.MU_ID as MU1_1733_2_, this_.MU .... par '*'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
select * from ( 
select '*'
from MATOS_USERDPT this_ 
left outer join MATOS_LOC matosloc2_ on this_.MU_LOCID=matosloc2_.ML_ID 
left outer join PHILINK_USER philinkuse3_ on this_.MU_USERID=philinkuse3_.PU_SERIAL 
where (this_.MU_USERID=2662) ) where rownum <= 100

Avec le query exécuté manuellement, pour chaque objet 'MatosUserdpt' trouvé j'ai la bonne valeur dans 'muLocid' et donc l'objet 'matosloc' est correct également.
Par contre la requete exécutée sur le serveur (méthode findByExample) me donne pour chaque objet 'MatosUserdpt' un 'muLocid' à 0 !!
Je ne vois pas du tout d'où ça pourrait venir.

Merci pour votre aide !

Frédéric.