1
我有個教學班,映射是這樣的:LEFT OUTER JOIN獲取未正確填入地圖收集(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;
}
有在CurrencyTable一行和三排CurrencyTableRate指CurrencyTable在數據庫。
當我加載CurrencyTable使用HQL:
from CurrencyTable where refCode = :refCode
我得到的rateMap三個項目的實體,但如果我試試這個:
from CurrencyTable table left outer join fetch table.rateMap where refCode = :refCode
只有一個在rateMap條目。
我查看了Hibernate生成的查詢,並手動運行它 - 它按預期的方式返回了三行,因此它在提取後映射它們似乎有問題。有沒有人囚禁過這樣的問題? 我使用休眠版本3.2.6.ga和Oracle 10g
我添加了別名,它沒有影響。正如我寫的問題,我查看了由Hibernate生成的SQL查詢並手動運行它 - 它按預期返回了三行。我使用了一個解決方法,先運行第一個查詢(沒有離開外部聯接提取),然後在地圖上調用Hibernate.initialize。因爲它在我的工作中,所以我沒有時間去調試Hibernate來了解發生了什麼,但是這樣的行爲讓我感到不安:-) – 2009-05-29 08:15:32