나는 Hibernate 4.3.5, Java 1.6 및 Spring 4.0.3을 사용하고있다.Hibernate (hbm) - 컨테이너 객체를 병합 한 후 where 절을 사용하여 새로 고침
나는 엔티티를 hbm을 통해 매핑했으며, 내 응용 프로그램을 논리적으로 삭제하려고합니다. 그래서 각 매핑 된 엔티티에서 엔티티가 삭제되었는지 여부를 나타내는 'deleted'라는 속성을 추가했습니다.
삭제 된 엔티티 (삭제 된 속성이 true 인 엔티티)를로드하지 않으므로 매핑 된 클래스에서 where 절을 사용 했으므로 엔티티가 논리적으로 삭제되지 않습니다.
또한 동일한 일대 다 관계에 동일한 where 절을 추가했습니다.
특정 경우에는 Document 엔터티와 일대 다 관계가있는 Report 엔터티가 있습니다.
따라서 문서를 삭제 된 것으로 표시하고 보고서 엔터티 (병합 포함)를 저장하면 보고서 엔터티가 삭제 된 것으로 표시된 문서를 유지하지 못합니다. 그러나 이것은 발생하지 않습니다.
<hibernate-mapping>
<class
name="es.entities.Document"
table="documents"
dynamic-insert="false"
dynamic-update="false"
where="deleted = 0">
<id name="id">
<generator class="identity"/>
</id>
<property name="name"></property>
<property name="type"></property>
<property name="size"></property>
<property name="deleted"></property>
</class>
</hibernate-mapping>
나는 Spring 트랜잭션을 열고 서비스 (ReportService를)를 사용 :이 문서 실체에 대한 HBM입니다 여기
<hibernate-mapping>
<class
name="es.entities.Report"
table="reports"
dynamic-insert="false"
dynamic-update="false"
where="deleted = 0">
<id name="id">
<generator class="identity"/>
</id>
<property name="title"></property>
<property name="deleted"></property>
<set
name="documents"
table="documents"
cascade="all"
lazy="false"
where="deleted=0">
<key column="id_report"/>
<one-to-many class="es.entities.Document"/>
</set>
</class>
</hibernate-mapping>
:
이
는보고 실체에 대한 HBM입니다.@Autowired
private ReportDao reportDao;
@Transactional
public Report save(Report report) {
this.reportDao.save(report);
}
그리고 이것은 DAO 내가 보고서 개체 저장하는 데 사용 (ReportDao) 방법 :이 방법은
public Report save(Report report) {
return (Report) this.currentSession().merge(report);
}
내가 예를 넣어 : 내가 서비스에 보내는 매개 변수가 포함을 두 개의 Document 객체가있는보고 객체 중 하나는 삭제되고 다른 객체는 삭제됩니다. DAO 메서드는 동일한 정보를 반환하지만이 메서드는 문서 만 삭제되지 않도록 반환합니다.
참고 : 다른 트랜잭션과 함께 다른 방법을 사용하는 경우 문서가 삭제되지 않은 상태로 보고서를 얻지 만 동일한 트랜잭션에서이 작업을 수행하려고합니다.
아무도 나를 도울 수 없거나이 대안을 보여줄 수 있습니까? 병합 이외의 Session 메서드를 사용할 수 있습니까?
고마워요.
그리고 보고서 엔티티를 어떻게 다시 가져와야합니까? 어쩌면 Hibernate.initialize()로? 감사합니다 –
이 메서드를 추가하고 보고서를 저장 한 후에 사용하십시오. 공용 보고서 새로 고침 (보고서 보고서) { return (Report) this.currentSession(). refresh (report); } – Amit