2013-01-17 172 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

取景器具有可用於加載其他表中的特性的fetch()方法。例如:

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

所以這可能意味着如果我使用finder來獲取我的Trips,它會包含正常的TRoute對象嗎?失敗的原因是我使用了我描述自己並且顯然不完全正確的RouteId()方法? – heroix

+1

是的,每個「Trip」將包含一個「TRoute」對象。默認情況下,相鄰表的屬性不會被加載,因爲你可能真的只想要Trip屬性而不關心將數據發送到Web瀏覽器時的'TRoute'屬性。在上面添加'.fetch'行指定,每次調用'byRouteId'方法時都要加載這些數據 –