2012-06-18 3 views
2

큰 레거시 스키마 매핑에 관한 조언을 찾고 있습니다.외래 키가없는 최대 절전 모드 ManyToOne

여기 상황이 있습니다. BusinessTransaction이라는 클래스가 있다고 가정합니다. 이 클래스에는 사용자 ID를 참조하는 여러 필드가 있습니다.

@Entity 
public class BusinessTransaction implements Serializable { 

    private Long id; 
    private User createdBy; 
    private User editedBy; 
    private User cancelledBy; 

    private String department; 
    // etc 

} 

public class User implements Serializable { 
    private Long id; 
    private String department; 
    //etc 
} 

그러나 BusinessTransaction 테이블과 User 테이블 간에는 외래 키가 없습니다. SQL에서 사용자는 부서 키의 왼쪽 외부 조인을 통해 BusinessTransaction에 연결됩니다.

이러한 외래 키를 만들려면 조인 테이블을 만들어야합니다. 우리의 DBA는 Foreign Keys 또는 join 테이블을 생성하는 것을 꺼려하고 있습니다 (일괄 처리 스크립트에 영향을 미치고 응용 프로그램의 부작용 가능성 등).

내가 가진 유일한 다른 생각은 JoinFormula의 사용이었습니다. 그러나 @JoinFormula는 최고의 문서가 없기 때문에 데이터는 읽기 전용입니다.

유용 할 것 같습니까?

편집 : 부서를 추가했습니다.

제이슨도 외래 키를 생성하거나 최대 절전 모드에서이 테이블 사이의 관계를 선언하기 위해 테이블을 조인 할 필요가 없습니다

+1

FK가없는 경우 데이터베이스에서 비즈니스 트랜잭션이 사용자를 참조하는 방법은 무엇입니까? 사용자를 참조하기 위해 비즈니스 거래 테이블에 저장되는 것은 무엇입니까? –

+0

불량. 위의 내용을 편집했지만 기본적으로 SQL/HQL 쿼리가 왼쪽 외부 조인을 수행 할 수있는 필드가 있습니다. – Jason

+0

"필드가 조인을 수행 할 수 있도록 필드"는 외래 키이지만 외래 키가 없다고 말하는가? 부서별로 사용자를 식별하는 경우 부서를 User의 기본 키로 지정하십시오. – meriton

답변

4

. Hibernate는 외부 키가 존재 하는지를 검증하지 않는다 (데이터베이스 스키마 유효성 검사를 요구하지 않는 한).

하지만 사용자 테이블에 적절한 색인이 필요합니다. 인덱스는 외래 키와도 독립적이지만 인덱스를 만들지 않으면 성능이 크게 저하됩니다.

외래 키가 생성되지 않은 경우 사용자 테이블의 키가 누락되어 있으면 Hibernate 측에서 불확정 동작 (오류)이 발생할 수 있습니다. 외래 키는 데이터베이스의 일관성을 보장하기위한 것입니다.