我有这样的映射类:
@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 中有 1 行,CurrencyTableRate 中有 3 行引用数据库中的 CurrencyTable。
当我使用 HQL 加载 CurrencyTable 时:
from CurrencyTable where refCode = :refCode
我在 rateMap 中得到一个包含三个条目的实体,但如果我尝试这个:
from CurrencyTable table left outer join fetch table.rateMap where refCode = :refCode
rateMap 中只有一个条目。
我查看了 Hibernate 生成的查询并手动运行它——它返回了三行,正如预期的那样,所以在获取后映射它们似乎是一个问题。有没有人遇到过这样的问题?我使用 Hibernate 版本 3.2.6.ga 和 Oracle 10g