Ich habe Klassen bekam mit Zuordnungen wie folgt aus:LEFT OUTER JOIN holen nicht richtig Kartensammlung füllen (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;
}
Es gibt eine Zeile in Currency und drei Reihen in CurrencyTableRate auf die Currency Bezug auf Datenbank.
Wenn ich laden Currency mit HQL:
from CurrencyTable where refCode = :refCode
ich eine Einheit mit drei Einträgen in rateMap bekommen, aber wenn ich das versuchen:
from CurrencyTable table left outer join fetch table.rateMap where refCode = :refCode
gibt es nur einen Eintrag in rateMap.
Ich schaute auf Abfrage generiert von Hibernate und führte es manuell - es gab drei Zeilen, wie erwartet, so scheint es ein Problem mit dem Mapping sie nach dem Abrufen sein. Hat jemand solch ein Problem gelöst? Ich benutze Hibernate Version 3.2.6.ga und Oracle 10g
Ich habe Aliase hinzugefügt und es hatte keine Auswirkungen. Wie ich in Frage schrieb, schaute ich auf SQL-Abfrage, die von Hibernate erzeugt wurde, und führte es manuell aus - es gab wie erwartet drei Zeilen zurück. Ich habe eine Problemumgehung mit dem Ausführen der ersten Abfrage (ohne das Abrufen des linken äußeren Joins) und dem anschließenden Aufrufen von Hibernate.initialize auf der Karte verwendet. Da es in meiner Arbeit ist, habe ich keine Zeit, Hibernate zu debuggen, um herauszufinden, was vor sich geht, aber ein solches Verhalten stört mich :-) –