1

Play フレームワーク (Java) 1.2.4、jpa、および休止状態を使用しています。検索エラーが発生したときに関係 (oneToMany) モデル フィールドの値を確認するにはどうすればよいですか

国モデル:

@Entity
public class Countries extends Model {

    @Required
    public String name;

    public String iso2;

    public String iso3; 

    @OneToMany(mappedBy="country", fetch=FetchType.EAGER,  cascade=CascadeType.All)
    public List<States> states;

    public Countries() { }

}

状態モデル:

@Entity
public class States extends Model {

   @Required
   public long country_id;

   @Required
   public String name;  

   @Required
   public long product_id; 

   @ManyToOne(fetch=FetchType.EAGER)
   @NotFound(action = NotFoundAction.IGNORE)
   @JoinColumn(name="country_id", nullable=false,insertable=false, updatable=false)
   public Countries country;

   public States() { }
}

国内コントローラー:

   List<Countries> countries = Countries.find("states.product_id =5").fetch(); 

状態テーブルの値 (oneToMany) を確認すると、次のエラーが発生しました:

    IllegalArgumentException occured : org.hibernate.QueryException: illegal attempt to dereference collection 
4

2 に答える 2

0

メソッドfindは、通常の JPQL クエリもサポートします。以下は、product_id 5 の州を持つ国の一意のリストを取得するためのドロップイン置換です。

SELECT DISTINCT(s.country) FROM States s WHERE s.product_id = 5
于 2013-02-18T21:22:34.833 に答える
0

テストされていませんが、このようなものは機能すると思います。

List<Countries> countries = Countries.find(
    "select c from Countries c, States s where s.country = c and s.product_id = ?", 5
);

5 前後の見積もりが必要かもしれませんが、忘れてしまいました。join 句を使用することもできますが、ここでは必要ないと思います。

また、モデル名は複数形ではなく単数形にする必要があります。それはあなたを混乱させるはずです。それは私を混乱させます:-)

于 2013-02-18T12:17:45.090 に答える