테이블간에 OneToMany 연결이 있습니다. 결과 및 ResultAux. ResultAux 개체 집합을 검색 할 수 있습니다 결과. 그 후 ResultAux 개체를 설정하고 각 설정 항목에 merge을 사용하여 변경 내용을 데이터베이스로 플러시합니다. 이처럼 : 내가 알아야 할 몇 가지 추가 작업을 위해최대 절전 모드 : 새 레코드 또는 이전 레코드
Set<ResultAux> resultAuxes = result.getResultAuxes();
if (resultAuxes != null) {
for (ResultAux resultAux : resultAuxes) {
resultAux = getDaoFactory().getResultAuxDAO().merge(resultAux);
}
}
항목에 새로운 기록을 설정하고 테이블에 삽입됩니다 또는 업데이트됩니다 오래된 하나 (변경 없음)입니다. 나는 모든 항목이 ResultAux 세트가 이미 ID를 가지고 있다는 것을 알아 차 렸습니다. 따라서 null을 다른 테이블과 마찬가지로 확인할 수 없습니다. 그런 것을 결정할 방법이 있습니까 (prefferably 여분의 libs를 포함하지 않음)?
편집 :
<hibernate-mapping>
<class name="ResultAux" table="RESULT_AUX">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="additinalInfoType" column="AITYPE" type="dao.hibernate.utl.AdditinalInfoEnumType" />
<property name="sorter" column="SORTER" />
<property name="value1" column="VAL1" />
<property name="value2" column="VAL2" />
<many-to-one name="result" column="RESULT_ID" class="Result" />
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="Result" table="RESULT">
<id name="id" column="ID">
<generator class="native" />
</id>
<property name="questionNumber" column="Q_NUM" />
<property name="answerNumber" column="A_NUM" />
<property name="questionGroup" column="Q_GRP" />
<property name="answerValue" column="A_VAL" />
<set name="resultAuxes" inverse="true" cascade="all-delete-orphan"
lazy="false">
<key column="RESULT_ID" />
<one-to-many class="ResultAux" />
</set>
</class>
</hibernate-mapping>
비 지속 엔터티에 ID가 설정되어 있지 않다고 말했을 것입니다. 세트의 모든 항목에 ID가 있는지 확실합니까? – sp00m
나는 당신이 resultAux에서 병합을 사용하지 않아야한다고 생각하지만, 결과 클래스에서 최대 절전 모드는 일대 다 관계를 처리해야한다. 맵핑 구성도 게시 할 수 있습니까? –
@ sp00m : 최대 절전 모드가 내 장점이 아닙니다. Result 개체에서 검색 한 ResultAux 집합에 항목을 추가 할 때 어떤 일이 발생하는지에 대한 의문이 생깁니다. 또한 결과 집합은 주어진 코드 위에 유지됩니다. 아마도이 코드 실행 시점에서 ResultAux가 지속되도록 만드는 것이 계단식 일 것입니다. –