2012-05-29 5 views
7

저는 PlayFramework를 사용하고 있으며 실제로 좋아합니다. 내가 예를 들어 내가 user 테이블이 테이블에서 데이터를 잡아하고자하면, 다음과 같은 구문을 사용합니다Play Framework 및 Ebean을 사용하는 복잡한 조인

List<User> users = User.find.where().eq("email", email).findList(); 

내 질문에 내가 사용자 개체를 얻을 때, 내가 id 열이 있다는 것입니다. 그 id 가치와 나는 다른 테이블에 매핑 할 수 있고 그 테이블의 id을 더 많은 테이블에 맵핑 할 수 있으므로 여러 테이블에 조인하는 기본 개념이 있습니다. 위와 같은 구문으로 구현하는 방법을 설명하는 곳에서 읽을 수있는 예제 나 장소가 있습니까?

나는 자신을 발견하려고 노력했지만, 지금은 생각할 수없는 유일한 방법은 준비된 문장으로 SQL을 사용하는 것입니다. 모델 사이

Relationships@OneToMany 같은 일반적인 JPA 주석으로 설정되어 kalvish

답변

16

ellou ', @ManyToOne, @OneToOne 등은 사용자의 질문에 대한 사용자 테이블 User.java 모델과 Question.java 모델을 그래서 만약

을 수행 할 수 있습니다 @OneToMany로 가입 (이 하나 User 많은 Question들)

사용자

@Entity 
public class User extends Model { 
    @Id 
    public Long id; 

    public String email; 

    @OneToMany 
    public List<Question> questions; 
} 

질문

@Entity 
public class Question extends Model { 
    @Id 
    public Long id; 

    public String question; 
} 

당신이 컨트롤러, Ebean는 기본적으로 '조인'수행에서 사용자를 선택합니다뿐만 아니라 모든 사용자의 질문을 가져옵니다 : 기본적으로

User user = User.find.where().eq("email", email).findUnique(); 
List<Question> usersQuestion = user.questions; 

Ebean은 모든 객체의 속성과 관계를 가져 오므로 하위 쿼리를 만들 필요가 없습니다. 물론 현재 필요한 데이터 만 선택하거나 불러올 수 있습니다. 에서

official Ebean documentation page 당신이은, 관계의 일반적인 설명 섹션 11.6.2 Relationships에서 사용할 수 있습니다 꽤 좋은 참조 가이드 (PDF)를 찾을 수 있습니다. 섹션 4.1.2 Query에서

예 (초) 답장을 보내 select()fetch()

+1

안녕 마커스의 사용, 감사와 "부분"개체를 얻을하는 방법을 설명하는있다. 지금 당장 매뉴얼을보고 있었고, 질문을 할 수 있을지 궁금합니다 ... 섹션 4.1.5는 OneToMany, ManyToOne 등을 설명합니다. 그러나 어떻게 어떤 컬럼이 매핑되는지 알고 있습니까? 'myId'라는 컬럼이 있고 다른 테이블의'id' 컬럼에 매핑한다고 가정하면,이를 지정하는 방법이 있습니까? – KVISH

+0

Ebean은 모델 변경시 적절한 DDL을 작성하기에 충분합니다. 실제 상황에서 이것을주의하십시오. 그러나 다른 테스트 프로젝트를 생성하고 Ebean에서 직접 배우는 것이 좋습니다. – biesior

+0

@KVISH 당신이 찾고있는 것이 JPA annotation @ JoinColumn인데, 여기에서 조인 열의 이름을 지정할 수 있습니다 사용. –