Java 具有一对多关系的Hibernate条件搜索请求

Java 具有一对多关系的Hibernate条件搜索请求,java,hibernate,one-to-many,criteria,hibernate-criteria,Java,Hibernate,One To Many,Criteria,Hibernate Criteria,我试着这样做: 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(); 我还在Vend

我试着这样做:

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();
我还在
Vendor
类中找到了
name
列,我正试图在其中搜索

那么我怎么可能做这样的搜索请求呢


谢谢。

您需要将您的条件重新分配给原始对象

您将所有汽车取回的原因是,将供应商添加到查询中的代码行创建了一个新的
条件
对象,而您当时不使用该对象

更改:

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.createCriteria(“供应商”)。添加(Restrictions.eq(“名称”,输入))//无所事事
结果=(列表)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();
session=HibernateUtil.getSessionFactory().openSession();
Criteria cr=session.createCriteria(Car.class);
cr=cr.createCriteria(“供应商”)。添加(Restrictions.eq(“名称”,输入));
结果=(列表)cr.List();

如果你不能得到唯一的Car.class结果,你需要设置结果变压器

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();
Criteria cr=session.createCriteria(Car.class);
cr.createAlias(“供应商”、“供应商”);
cr.add(Restrictions.eq(“供应商名称”,输入));
crit.setResultTransformer(Criteria.DISTINCT\u ROOT\u实体);
结果=(列表)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();
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();