1

陳腐な質問であることはわかっていますが、解決策が見つかりませんでした。私は 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: プロキシを初期化できませんでした - セッションがありません

このエラーを修正する方法を知っていますか?

4

2 に答える 2

0

私はこの問題を解決しました!理由はFeature授業中にありました。hashCode機能がありませんでしequalsた。これらの機能の実装後、すべてが正常になりました。

于 2013-04-21T11:29:07.473 に答える