1
我在2個對象之間有一個雙向關係-EvalMasterEvaluation(one)和EvalMasterEvalDetail(many)。我嘗試了許多不同的解決方案,但是我必須錯誤地實現它們。我的目標是返回給定eval id的詳細信息列表。使用Jackson 2.2將Hibernate結果序列化爲JSON字符串,無限循環
我使用傑克遜2.2(與數據綁定和數據類型 - hibernate3庫),休眠3.6和春天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 = 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>
您是否也找到了解決方案的值? – Atais
我已經報廢了這個查詢。我現在不記得我是否修復了這個問題,但是Hibernate 3 Module在我的應用程序中與其他hql查詢一起成功運行。 –