我有2张桌子:
|shops | |discounts |
|-------------| |-------------|
|id | |id |
|name | |title |
|shop_id |
实体:
@Entity
@Table(name = "shops")
public class Shops {
@Id
@GeneratedValue
@Column(name="id", unique=true, nullable=false)
protected Integer id;
@Column(name="name", length=45, nullable=false)
protected String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "shop")
private Set<Discounts> discounts = new HashSet<Discounts>(0);
//getters & setters
}
@Entity
@Table(name="discounts")
public class Discounts {
@Id
@GeneratedValue
@Column(name="id")
private Integer id;
@Column(name="title")
private String title;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "shop_id", nullable = false)
private Shops shop;
//getters & setters
}
我需要收到属于使用标准的商店的所有折扣。我尝试如下:
Criteria cr = session.createCriteria(Discounts.class);
cr.add(Restrictions.eq("id", shop.getLocality()));
List<Discounts> discounts = cr.list();
但是我收到了一个错误:
java.lang.ClassCastException: exmp.entity.Discounts_$$_jvste43_1 cannot be cast to java.lang.Integer
如何解决此错误?
答案 0 :(得分:0)
你可以这样做:
Criteria cr = session.createCriteria(Discounts.class);
cr.add(Restrictions.eq("shop", shop)); //assuming shop is an object of Shops
List<Discounts> discounts = cr.list();
这会在内部将id
的{{1}}列映射到Shops
的{{1}}列,以检查约束并返回结果。
答案 1 :(得分:0)
文档说idEq适用于标识符属性。
相反,你可以尝试这样的事情:
Criteria cr = session.createCriteria(Discounts.class);
cr.createAlias("shop","shop")
cr.add(Restrictions.eq("shop.id",<yourid>));
但如果您只是加载一个带有ID的商店,那么您将获得该商店的所有折扣,因为您有双向关系。
Criteria cr = session.createCriteria(Shops.class);
cr.add(Restrictions.idEq(<yourid>));