J'ai des classes avec des mappings comme ceci:externe gauche join fetch ne remplit pas correctement cartothèque (HQL)
@Entity
public class CurrencyTable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Version
@Column(nullable=false)
private Timestamp version;
@Column(length=32, unique=true)
private String refCode;
@OneToMany(mappedBy="currencyTable", fetch=FetchType.LAZY, cascade = {CascadeType.ALL})
@MapKey(name="currency")
private Map<String, CurrencyTableRate> rateMap = new HashMap<String, CurrencyTableRate>();
}
@Entity
public class CurrencyTableRate{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Version
@Column(nullable=false)
private Timestamp version;
@Column(length=3)
private String currency;
@Basic
private BigDecimal rateValue;
@ManyToOne(optional=false,fetch=FetchType.LAZY)
private CurrencyTable currencyTable;
}
Il y a une ligne dans CurrencyTable et trois lignes CurrencyTableRate se référant à la CurrencyTable base de données.
Quand je charge CurrencyTable à l'aide HQL:
from CurrencyTable where refCode = :refCode
Je reçois une entité avec trois entrées rateMap, mais si j'essaie ceci:
from CurrencyTable table left outer join fetch table.rateMap where refCode = :refCode
il n'y a qu'une seule entrée dans rateMap.
J'ai regardé la requête générée par Hibernate et l'ai exécutée manuellement - elle a renvoyé trois lignes, comme prévu, il semble donc que le problème soit de les mapper après la récupération. Quelqu'un at-il encombré un tel problème? J'utilise Hibernate version 3.2.6.ga et Oracle 10g
J'ai ajouté des alias et cela n'a pas eu d'impact. Comme je l'ai écrit en question, j'ai regardé la requête SQL générée par Hibernate et l'ai exécuté manuellement - il a renvoyé trois lignes, comme prévu. J'ai utilisé une solution de contournement avec l'exécution de la première requête (sans extraire la jointure externe), puis en appelant Hibernate.initialize sur la carte. Comme c'est dans mon travail, je n'ai pas le temps de déboguer Hibernate pour savoir ce qui se passe mais un tel comportement me bouleverse :-) –