2011-05-27 87 views
0
@Entity 
public class Store {} 


@Entity 
@Table(name = "storeitem") 
public class StoreItem { 

    @Id @Column 
    private Integer storeId; 

    @Id 
    @ManyToOne @JoinColumn (name="productId", referencedColumnName="id") 
    private Product product; 

    @Column private Double cost; 
} 

mysql> desc storeitem; 
+-------------+---------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+-------------+---------------------+------+-----+---------+-------+ 
| StoreId  | int(10) unsigned | NO | PRI | 0  |  | 
| ProductId | bigint(20) unsigned | NO | PRI | 0  |  | 
| cost  | double unsigned  | NO |  | 0  |  | 



@Entity 
@Table(name = "product") 
public class Product { 
    @Id @GeneratedValue @Column(name = "Id") 
    private Long id; 

    @Column(name = "Name") 
    private String name; 
} 

mysql> desc product; 
+-------------+---------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+-------------+---------------------+------+-----+---------+----------------+ 
| Id   | bigint(20) unsigned | NO | PRI | NULL | auto_increment | 
| Name  | varchar(70)   | NO |  |   |    | 




Criteria cr=sess.createCriteria(StoreItem.class); 
cr.add(Restrictions.eq("product.name","butter")); 
cr.list(); 

当我试图通过孩子的属性过滤我得到这个下面例外休眠单向多对一查询由孩子的财产

org.hibernate.QueryException: could not resolve property: product.name of:StoreItem 

回答

0

HQL解决万阿英,蒋达清

String hql="from StoreItem where productId in (select pd.id from Product pd where name = 'butter')"; 
Query query=sess.createQuery(hql); 
query.list(); 
0
Try{ 

    Criteria cr=sess.createCriteria(StoreItem.class, "si"); 
    crit.createCriteria("product","product").add(Restrictions.eq("name","butter")); 
    cr.list(); 

} 
+0

我尝试“CR .add(Restrictions.eq(“product”,“product”)).add(Restrictions.eq(“name”,“butter”));'我得到了这个错误'org.hibernate.QueryException:无法解析属性:名称:StoreItem' – yodhevauhe 2011-05-27 11:39:48

+0

抱歉代码错误请参阅编辑代码。如果失败尝试'产品,Product.class'我不知道基于更多的注释这就是为什么。 – 2011-05-27 11:45:40