Hibernate示例查询

时间:2012-05-08 06:39:25

标签: java hibernate

我将以一个例子来解释这个问题 我有一个Vehicle对象,它有一个模型名称和一个make。制作时,应列出相关车辆。当给出制造和模型时,应列出合适的车辆。

例如: 有一个名为'Vehicle'的实体。它有一个名为makeModel的代理,其实体名称为MakeModel。 MakeModel的代理是'make'和'model',其实体名称是Model和Make.Both Entititiyes'Model'和'Make'有String变量'name'。这是类

class Vehicle{
 private Integer vehicleId;  
 private MakeModel makeMOdel;
 //getters and setters  
}

class MakeModel {
 private Make make;
 private Model model;  
 //getters and setters  
}  

class Make{
 private Integer mid;
 private String make;
}  
class Model{  
 private Integer mdlid;
 private String modelName;
}

以下是我试图获取车辆清单的方法。这里,session是Hibernate Session。

Criteria cr= session.createCriteria(Vehicle.class);  

MakeModel mkmd=new MakeModel();  
if( /* if only the make is give */){  
 Make mk=new Make();  
 mk.setMake("Toyota");  
 mkmd.setMake(mk);
}  
else if(if both make and and model given){  
 Make mk=new Make();  
 mk.setMake("Toyota");  
 mkmd.setMake(mk);  
 Model md=new Model("Venus");  
 mkmd.setModel(md);
 }  

cr.createCriteria("makeModel").add(Example.create(mkmd));List l=cr.list();  

但这会返回所有车辆。 我想让所有车辆都使用休眠标准,而不是HQL。

同样的问题可以找到here,也可以提到this。任何人都让我知道哪里出错了,以及如何根据给定的标准检索车辆清单。

1 个答案:

答案 0 :(得分:2)

假设您要传递给函数 makeValue modelValue ,这些是您想要的品牌和型号,您将拥有:

Criteria cr = session.createCriteria(Vehicle.class);  // Create the criteria on desired class
cr.createAlis("makeModel", "makeModel")
  .createAlias("makeModel.make", "make")
  .createAlias("makeModel.model", "model");  // Creating aliases makes a join on those tables 
if (makeValue != null){
    cr.add(Restrictions.eq("make.make", makeValue))  // If you have a makeValue passed, filter by it
}
if (makeModel != null){
    cr.add(Restrictions.eq("model.modelName", modelValue));  // If you have a makeModel passed, filter by it
}

return cr.list();    // Return the list

结果将是List<Vehicle>。您可以在方法中添加@SuppressWarnings("unchecked"),以避免看到未经检查的投射警告。