2014-02-06 71 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