我有一個問題,使用休眠3實現雙向父/子關係。父,在這種情況下,是類ReportCriteria。孩子是PkVisit班。我粘貼了我的hibernate配置文件以及下面的底層java對象。休眠雙向父/子問題
ReportCriteria配置:
<hibernate-mapping package="org.fstrf.masterpk.domain">
<class name="ReportCriteriaBean" table="masterPkReportCriteria">
<id name="id" column="id">
<generator class="org.hibernate.id.IncrementGenerator" />
</id>
<bag name="pkVisits" table="masterPkWeeks" cascade="all-delete-orphan" inverse="true">
<key column="runId"/>
<one-to-many class="PkVisit"/>
</bag>
</class>
</hibernate-mapping>
ReportCriteria豆:
public class ReportCriteriaBean {
private Integer id;
private List<PkVisit> pkVisits = LazyList.decorate(new ArrayList(), FactoryUtils.instantiateFactory(PkVisit.class));
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public List<PkVisit> getPkVisits() {
return pkVisits;
}
public void setPkVisits(List<PkVisit> pkVisits) {
this.pkVisits = pkVisits;
}
}
PkVisit配置:
<hibernate-mapping package="org.fstrf.masterpk.domain">
<class name="PkVisit" table="masterPkWeeks">
<id name="id" column="id">
<generator class="org.hibernate.id.IncrementGenerator" />
</id>
<many-to-one name="reportCriteriaBean" class="ReportCriteriaBean" column="runid" not-null="true" />
<property name="week" column="week" />
</class>
</hibernate-mapping>
PkVisit豆:
public class PkVisit {
private Integer id;
private ReportCriteriaBean reportCriteriaBean;
private Integer week;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public ReportCriteriaBean getReportCriteriaBean() {
return reportCriteriaBean;
}
public void setReportCriteriaBean(ReportCriteriaBean reportCriteriaBean) {
this.reportCriteriaBean = reportCriteriaBean;
}
public Integer getWeek() {
return week;
}
public void setWeek(Integer week) {
this.week = week;
}
}
當我嘗試保存ReportCriteria的一個實例時,會出現問題,由於級聯,還應該保存任何子PkVisits。然而,當保存使用
hibernateTemplate.saveOrUpdate(reportCriteria);
以下錯誤稱爲生成:
org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value: org.fstrf.masterpk.domain.PkVisit.reportCriteriaBean; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: org.fstrf.masterpk.domain.PkVisit.reportCriteriaBean
當我救不包含PkVisits報告準則,則一切正常,因爲我所期望的,但只要任何元素都出現在ReportCriteria bean的pkVisits列表中。
解決方案編輯:
我的問題是,我從來沒有明確設置的兒童(PkVisits)父(ReportCriteriaBean)。我編輯我的PkVisits二傳手通過以下方式糾正的問題:
public void setPkVisits(List<PkVisit> pkVisits) {
this.pkVisits = pkVisits;
for(PkVisit visit : pkVisits){
visit.setReportCriteriaBean(this);
}
}
你在說,ReportCriteriaBean爲空是正確的,但由於方式PkVisits的名單是由自己設定這個附加功能做不行。我編輯了我的原始帖子,以表明我所做的確切更改。謝謝! – TimmyJ 2009-07-09 16:13:26