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>