2011-03-17 1 views
2

현재 Doctrine을 사용하여 데이터베이스를 개조하려고하고 있지만 현재 구현에서는 테이블간에 많은 양방향 관계가 존재하지 않습니다. 이로 인해 주어진 개체에서 개체 그래프를 탐색하기가 어렵습니다.Doctrine Repository vs Private Members

주어진 시점에서 시작하여 전체 개체 그래프를 탐색 할 수 있기를 원합니다. 설명서를 읽기에서, 나는 할 수 있습니다 내가)를 사용하여 적절하게 설정 협회 매핑

2를 통과 사용자 정의 저장소를 만들고 다양한 전달하여 가져올 수 있도록

1) 양방향 관계 필드로 데이터베이스를 다시 작성 엔티티

나는 양방향 관계를 도처에 만들지는 모르겠지만, 동시에 많은 사용자 정의 리포지토리를 만드는 것은 나에게 나쁜 느낌을 준다. 어소시에이트 맵핑과 리포지토리를 사용하기로 결정할 때 어림짐작이란 무엇입니까? 하나 또는 다른 성능 이점이 있습니까?

답변

0

페치 조인을 사용하여 쿼리를 구성하면 엔티티 간의 단방향 연결을 여전히 트래버스 할 수 있습니다. 이 방법으로 관련 엔터티는 쿼리에서 반환 된 수화 결과 집합에 포함됩니다.

반대쪽에서 오브젝트 그래프를 더 깊숙이 탐색해야하는 경우 역원의 연관된 엔티티를 참조하는 쿼리에 다른 조인을 추가 할 수 있습니다. 성능 관점에서, 단방향 페치 조인은 일반적으로 연관을 양방향으로 변환하는 것보다 바람직합니다.이 방식은 관련 엔티티가로드되는 시간을 제어 할 수 있기 때문입니다.

연관을 양방향으로 변환 했더라도 실제로 "데이터베이스를 다시 작성"하는 것은 아닙니다. 관계의 반대쪽에만 새 속성을 추가 할 것입니다. 이것은 데이터베이스 자체에 새로운 필드를 추가하지 않습니다.

사용자 지정 리포지토리를 추가/사용하는 경우 응용 프로그램 자체에 오버 헤드가 추가되지 않습니다. 사용자 지정 리포지토리는 쿼리 및 특정 엔터티에 특정한 기타 도메인 논리를 저장하기위한 장소입니다. 실제로 저장소 클래스에서 사용자 지정 쿼리를 코딩하는 것은 find() 및 findAll()과 같은 기본 리포지토리 메서드 만 사용하여 쿼리하는 것보다 효율적일 수 있습니다. 필요에 따라 관련 엔터티를 자동으로로드합니다.