適切に(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の1行とでたCurrencyTableを参照CurrencyTableRateで3行がありますデータベース。
私はHQLを使用したCurrencyTableをロードする場合:
from CurrencyTable where refCode = :refCode
を私はrateMapに3つのエントリを持つエンティティを取得しますが、私はこのしようとした場合:
from CurrencyTable table left outer join fetch table.rateMap where refCode = :refCode
をrateMapで唯一のエントリがあります。
私はHibernateで生成されたクエリを見て手動で実行しました。予想どおり3行を返したので、フェッチした後にマッピングすると問題があるようです。誰かがこのような問題に遭遇しましたか? 私はHibernateバージョン3.2.6.gaとOracle 10gを使用します
エイリアスを追加しましたが、影響はありませんでした。私が質問で書いたように、私はHibernateによって生成されたSQLクエリを見て、手動で実行しました - 期待通りに3行を返しました。最初のクエリを実行し(外部結合フェッチを残さずに)、マップ上でHibernate.initializeを呼び出すことで回避策を使用しました。それが私の仕事であるので、何が起こっているのかを知るためにHibernateをデバッグする時間はありませんが、そのような動作は私を混乱させます:-) –