2014-02-06 98 views
0

我已經通過連接兩個實體一個多到一的關係休眠許多-to-one關聯錯誤

@Entity 
public class A { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "A_ID") 
    public Long id; 

    public String status; 

    @OneToMany(mappedBy = "a") 
    public Collection<B> b; 
} 

@Entity 
public class B { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="A_ID", nullable=false) 
    public A a; 

    // ... some other members ... 
} 

現在,我想所有的B的具有A的 「接受」 狀態:

Criteria criteria = session.createCriteria(B.class); 
criteria.createAlias("a.status", "status"); 
criteria.add(Restrictions.eq("status", "accepted")); 
return criteria.list(); 

這導致休眠拋出「org.hibernate.QueryException:不是關聯:狀態」。我做錯了什麼?由於多對一的關係,我認爲這些表格是相關聯的。

+0

我覺得你有別名錯誤。你不能上的屬性創建別名,你可以創建公會。查看我的解決方案的更新答案。 – Zeus

+0

現在非常感謝你,它的工作。 – Mewel

回答

1

在@ManyToOne你忘了提到它的加盟哪個列。提供@JoinColumn,而且還指定的mappedBy = 'A'/逆=真等,

檢查this

更新:

Criteria criteria = session.createCriteria(B.class,"b"); 
criteria.createAlias("b.a", "a"); 
criteria.add(Restrictions.eq("a.status", "accepted")); 
return criteria.list(); 
+0

感謝您的回答宙斯,我編輯我的問題,並添加您的建議,但它不是這些變化工作壓力太大。 – Mewel