2010-02-15 5 views
3

복합 키가있는 레거시 데이터베이스 스키마를 사용하고 있습니다. 두 개의 관계가있는 엔티티가 있고 조인 열 중 하나가 공유됩니다.최대 절전 모드 : 동일한 조인 열을 사용하는 둘 이상의 관계

예를 들어, Department와 Course의 두 가지 관계가있는 Student 엔티티가 있다고 가정 해 보겠습니다. Department는 dept_code 열을 사용하고 Course는 dept_code 및 course_code 열을 사용합니다. 도메인 모델은 학생이 한학과에 속할 수 있고 코스를 아직 선택하지 않았거나 학생이 부서와 코스를 모두 선택했을 수도 있습니다. = 문제는 관계 중 하나가 읽기 전용 인서트를 사용하는 것으로 표시하지 않는 한, Hibernate는이 매핑을 허용하지 않는 것입니다

<many-to-one class="Department" name="department"> 
    <column name="dept_code"/> 
</many-to-one> 

<many-to-one class="Course" name="course> 
    <column name="dept_code"/> 
    <column name="course_code"/> 
</many-to-one> 

:이처럼 최대 절전 모드 매핑 모습입니다 false이고 update = false입니다.

둘 다 관계를 쓸 수있는 방법이 있습니까?

답변

1

당신하여 dept_code에하지 null이 속성을 설정하고 어떻게되는지)

한 다음 (즉 만족할 수 있겠지?)

2 ) 부서를 설정 읽기 전용 및 과정 수 작성하고 setDepartment에 기존 코스 코드의 course_code null로 코스 객체를 만들고 실제로 setCourse를 사용하여 업데이트가 잘되는지 확인하십시오.

1

기존 DB가있어서 테이블을 변경할 수 없다고 알고 있습니다. 그러나 가능한 경우 대리 키 또는 새 조인 테이블을 삽입합니다.

이 옵션을 사용하지 않으면 사용자가 직접로드하고 SQL을 지속 할 수 있습니다. < 로더>, < sql-insert>, < sql-delete> 및 < sq-update> 매핑 요소를 살펴보십시오. https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/querysql.html 13.3 장을 참조하십시오. 다음과 같습니다.

세 번째 옵션으로 연결없이 엔터티를 매핑하고 직접 CRUD 메서드를 수행 할 수 있습니다.로드, 저장, 업데이트 및 영구 메서드를 직접 작성하고 엔터티 간의 연결을 수동으로 처리합니다. 고객 코드에 중계 할 수 있습니다. 호출자는 setDepartment 및 getDepartment 메소드를 사용하고 DAO (또는 사용중인 다른 개념)가 나머지를 처리합니다.

Btw : Manning에서 JPA/Hibernate Book에 문제의 종류 ("Java Persistence with Hibernate"제 8 장 - 레거시 데이터베이스 및 사용자 정의 SQL)의 유용한 장이 있습니다.