У меня есть классы с такими сопоставлениями:
@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
В курсовой карте есть только одна запись.
Я посмотрел на запрос, сгенерированный Hibernate, и запустил его вручную - он вернул три строки, как и ожидалось, поэтому возникает проблема с отображением их после выборки. Кто-нибудь сталкивался с такой проблемой?
Я использую Hibernate версии 3.2.6.ga и Oracle 10g