陳腐な質問であることはわかっていますが、解決策が見つかりませんでした。私は 2 つの Bean を持っており、そのうちの 1 つにHashMap
コレクションがあります。このコレクションを読み取ろうとすると、例外が発生します。このコレクションを熱心にロードするように、マッピング構成が指定されていました。
私の環境は:
- 休止状態 4.2.0
- mysql-connector-java 5.1.24
また、私は2つの豆を持っています:
public class FeaturedDoc {
private Long id;
private Map<Feature, Float> features;
public FeaturedDoc() {
features = new HashMap<Feature, Float>();
}
(getters and setters)
}
と
public class Feature {
private Long id;
private String name;
private Long internalId;
(getters and setters)
}
この Bean にはマッピングがあります。
<class name="Feature" table="FEATURE">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="name" length="255" type="string" unique="true" column="NAME" index="INDEX_NAME"/>
<property name="internalId" type="long" unique="true" not-null="false" column="INTERNAL_ID" index="INDEX_INTID"/>
<sql-insert>insert into FEATURE (NAME, INTERNAL_ID, ID) values (?, ?, ?) on duplicate key update ID = ID</sql-insert>
</class>
<class name="FeaturedDoc" table="FEATURED_DOC">
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<map name="features" table="DOC_FEATURE" cascade="all" lazy="false" fetch="join">
<key column="ID"></key>
<map-key-many-to-many column="FEATURE_ID" class="Feature"/>
<element column="value" type="float"/>
</map>
</class>
また、メソッドを持つDAOレイヤーがあります:
public FeaturedDoc read(long id) {
FeaturedDoc fd = null;
try {
session.beginTransaction();
fd = session.get(FeaturedDoc.class, id);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
} finally {
close();
}
return fd;
}
私がこのようなことをしようとしているとき:
FeaturedDoc fd = daoService.read(26);
System.out.println(fd.getFeatures());
例外が発生しています
org.hibernate.LazyInitializationException: プロキシを初期化できませんでした - セッションがありません
このエラーを修正する方法を知っていますか?