2013-01-17 2 views
0

이 문제를 해결하는 데 몇 시간을 보냈습니다. 아이로부터 부모를 얻으려고하면 id 필드는 모두 비어 있습니다. 그것은 단지 의미가 없습니다. 그게 프레임 워크의 끔찍한 선택 외에 아무것도 나타낼 수 있다면 PlayFramework 2.0.4를 사용하고 있습니다.JPA @ManyToOne 필드가 비어 있습니다.

TRoute.java (상위)

@Entity 
@Table(name="routes") 
public class TRoute extends Model { 

    @Id 
    public String route_id; 
    public String agency_id; 
    @Constraints.Required 
    public String route_short_name; 
    @Constraints.Required 
    public String route_long_name; 
    public String route_desc; 
    @Constraints.Required 
    public String route_type; 
    public String route_url; 
    public String route_color; 
    public String route_text_color; 

    @OneToMany(mappedBy="troute") 
    public List<Trip> trips; 

    public static Finder<String, TRoute> find = new Finder(
      String.class, TRoute.class 
    ); 

} 

Trip.java (자식)

@Entity 
@Table(name="trips") 
public class Trip extends Model { 

    @Constraints.Required 
    public String route_id; 
    @Constraints.Required 
    public String service_id; 
    @Id 
    public String trip_id; 
    public String trip_headsign; 
    public String direction_id; 
    public String block_id; 
    public String shape_id; 

    @ManyToOne 
    @JoinColumn(name="route_id") 
    public TRoute troute; 

    public static List<Trip> byRouteId(String route_id) { 
     List<Trip> trips = 
      Trip.find 
      .where().like("route_id", route_id) 
      .findList(); 
     return trips; 
    } 

    public static Finder<String, Trip> find = new Finder(
      String.class, Trip.class 
    ); 

} 
+0

로그가 나타내는 것은 무엇입니까? 부모에 대한 SQL 가져 오기가 표시됩니까? –

+0

나는 Java에 익숙하지 않다. Play 프레임 워크에서 실행 한 SQL 쿼리를 볼 수있는 방법이 있습니까? – heroix

답변

1

파인더 다른 테이블의 등록 정보를 로딩하는데 사용될 수있는 페치() 메소드를 갖는다. 다음과 같음 :

public static List<Trip> byRouteId(String route_id) { 
    List<Trip> trips = List<Trip> trips = Trip.find 
     .fetch("troute") // fetch the other table's properties here 
     .where() 
     .like("route_id", route_id) 
     .findList(); 
    return trips; 
} 
+0

그래서 내 파인더를 사용하여 각각의 트립을 얻으면 각각 정상적인 TRoute 오브젝트를 포함한다는 것을 의미합니까? 실패한 것은 내가 설명한 자신에 의해 사용 된 RouteId() 메서드이며 완전히 수정되지 않은 것입니다. – heroix

+1

예, 각 '여행'에는 'TRoute'개체가 포함됩니다. 기본적으로 인접 테이블의 속성은로드되지 않습니다. 웹 브라우저로 데이터를 전송할 때 여행 속성 만 필요하고 'TRoute' 속성은 신경 쓸 필요가 없기 때문입니다. 위의'.fetch' 행을 추가하면 'byRouteId'메소드가 호출 될 때마다이 데이터를로드하도록 지정합니다 –

관련 문제