次のようなマッピングを持つクラスがあります。
@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 にはデータベース内の CurrencyTable を参照する 3 つの行があります。
HQL を使用して CurrencyTable を読み込む場合:
from CurrencyTable where refCode = :refCode
rateMap に 3 つのエントリを持つエンティティを取得しましたが、これを試してみると:
from CurrencyTable table left outer join fetch table.rateMap where refCode = :refCode
rateMap には 1 つのエントリしかありません。
Hibernate によって生成されたクエリを見て、手動で実行しました。予想どおり 3 行が返されたため、フェッチ後にそれらをマッピングする際に問題があるようです。誰もそのような問題に遭遇しましたか? Hibernate バージョン 3.2.6.ga と Oracle 10g を使用しています