我试过这样做:
session = HibernateUtil.getSessionFactory().openSession();
Criteria cr = session.createCriteria(Car.class);
cr.createAlias("vendor", "vendor");
cr.add( Restrictions.eq("vendor.name", input));
results = (List<Car>) cr.list();
还喜欢:
session = HibernateUtil.getSessionFactory().openSession();
Criteria cr = session.createCriteria(Car.class);
cr.createCriteria("vendor").add(Restrictions.eq("name", input));
results = (List<Car>) cr.list();
两种实现都只返回所有数据,而不是使用搜索查询指定。
在汽车课上,我有了关系:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_vendor", nullable=false)
public Vendor getVendor() {
return this.vendor;
}
此外,我还在我要搜索的name
班级上找到Vendor
列。
那我怎么可能做这样的搜索请求?
感谢。
答案 0 :(得分:0)
您需要将标准分配回原始对象。
您获得所有汽车的原因是因为将您的供应商添加到查询中的代码行会为您创建一个新的criteria
对象,然后您将不使用该对象。
变化:
session = HibernateUtil.getSessionFactory().openSession();
Criteria cr = session.createCriteria(Car.class);
cr.createCriteria("vendor").add(Restrictions.eq("name", input)); //Does nothing
results = (List<Car>) cr.list();
进入这个:
session = HibernateUtil.getSessionFactory().openSession();
Criteria cr = session.createCriteria(Car.class);
cr = cr.createCriteria("vendor").add(Restrictions.eq("name", input));
results = (List<Car>) cr.list();
它应该有用。
答案 1 :(得分:0)
如果您不会获得Car.class的唯一结果,则需要setResultTransformer
Criteria cr = session.createCriteria(Car.class);
cr.createAlias("vendor", "vendor");
cr.add( Restrictions.eq("vendor.name", input));
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
results = (List<Car>) cr.list();