1

EvalMasterEvaluation (1 つ) と EvalMasterEvalDetail (多数) の 2 つのオブジェクト間に双方向の関係があります。私はさまざまな解決策を試しましたが、それらを間違って実装しているに違いありません。私の目標は、特定の評価 ID の詳細のリストを返すことです。

Jackson 2.2 (databind および datatype-hibernate3 ライブラリを使用)、hibernate 3.6、および spring 3.2.1 を使用しています。読みやすくするために一部のコードを省略しています。

親クラス:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class EvalMasterEvaluation implements java.io.Serializable {

    private BigDecimal id;
    @JsonManagedReference private Set<EvalMasterEvalDetail> evalMasterEvalDetails = new HashSet<EvalMasterEvalDetail>(
            0);
}

子クラス:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class EvalMasterEvalDetail implements java.io.Serializable {
    private BigDecimal id;
    @JsonBackReference private EvalMasterEvaluation evalMasterEvaluation;
    private String active;
}

私のHibernate Criteriaクエリ:

Criteria criteria = session.createCriteria(EvalMasterEvalDetail.class)
                    .add(Restrictions.eq("active", "Y"))
                    .setFetchMode("evalMasterEvaluation", FetchMode.JOIN)
                    .createAlias("evalMasterEvaluation", "eval")
                    .add(Restrictions.eq("eval.id", evalId))
                    .addOrder(Order.asc("detailOrder"));

            details = criteria.list();

            ObjectMapper mapper = new ObjectMapper();
            json = mapper.writeValueAsString(details);

EvalMasterEvaluation マッピング

<hibernate-mapping>
    <class name="org.anes.surveys.domain.EvalMasterEvaluation" table="EVAL_MASTER_EVALUATION">
        <id name="id" type="big_decimal">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence-identity" >
                <param name="sequence">EVAL_MASTER_EVALUATION_SEQ</param>
            </generator>
        </id>
        <set name="evalMasterEvalDetails" table="EVAL_MASTER_EVAL_DETAIL" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="MASTER_EVAL_ID" precision="22" scale="0" not-null="true" />
            </key>
            <one-to-many class="org.anes.surveys.domain.EvalMasterEvalDetail" />
        </set>
    </class>
</hibernate-mapping>

EvalMasterEvalDetail マッピング

<hibernate-mapping>
    <class name="org.anes.surveys.domain.EvalMasterEvalDetail" table="EVAL_MASTER_EVAL_DETAIL">
        <id name="id" type="big_decimal">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence-identity" >
                <param name="sequence">EVAL_MASTER_EVAL_DETAIL_SEQ</param>
            </generator>
        </id>
        <many-to-one name="evalMasterEvaluation" class="org.anes.surveys.domain.EvalMasterEvaluation" fetch="select">
            <column name="MASTER_EVAL_ID" precision="22" scale="0" not-null="true" />
        </many-to-one>
        <property name="active" type="string">
            <column name="ACTIVE" length="1" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
4

1 に答える 1