2013-02-18 79 views
1

我使用的遊戲框架(Java)1.2.4,JPA和hibernate.How我可以查看關係(一對多)模型提交值上出現錯誤發現如何在一個檢查條件,許多關係模型提交值在JPA

Contry型號:

@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() { } 

} 

State模式:

@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() { } 
} 

在Contry控制器:

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

當我檢查以下錯誤狀態表中的值(一對多)發生:

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

回答

0

我覺得這樣的事情會的工作,雖然這是未經測試。

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

您可能需要5左右的報價,我忘了。你也可以通過加入條款來做到這一點,但我認爲這不是必要的。

此外,您的模型名稱應該是單數,而不是複數。這會讓你困惑。它使我困惑:-)

0

方法find也支持正常的JPQL查詢。以下是取代唯一使用product_id 5的國家列表的替代方案:

SELECT DISTINCT(s.country) FROM States s WHERE s.product_id = 5