【问题标题】:Hibernate Criteria searching request with One to Many relationship具有一对多关系的休眠条件搜索请求
【发布时间】:2014-07-06 09:33:18
【问题描述】:

我试过这样做:

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;
}

而且我在Vendor 类中也有name 列,我正在尝试搜索。

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

谢谢。

【问题讨论】:

    标签: java hibernate one-to-many criteria hibernate-criteria


    【解决方案1】:

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

    您将所有汽车都取回的原因是,将您的供应商添加到查询中的代码行会为您创建一个新的 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();
    

    它应该可以工作。

    【讨论】:

      【解决方案2】:

      如果你不会得到 Car.class 的唯一结果,你需要设置 ResultTransformer

      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();
      

      【讨论】:

        猜你喜欢
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        • 1970-01-01
        相关资源
        最近更新 更多