Java Hibernate示例查询

Java Hibernate示例查询,java,hibernate,Java,Hibernate,我将用一个例子来解释这个问题。 我有一个具有型号名称和品牌的车辆对象。给出品牌时,应列出相关车辆。当给出品牌和型号时,应列出合适的车辆 例如: 有一个名为“Vehicle”的实体。它有一个名为makeModel的代理,其实体名称为makeModel。MakeModel有两个代理,分别是“make”和“model”,它们的实体名称是model和make。EntitiYes“model”和“make”都有字符串变量“name”。下面是类 class Vehicle{ private Integer

我将用一个例子来解释这个问题。
我有一个具有型号名称和品牌的车辆对象。给出品牌时,应列出相关车辆。当给出品牌和型号时,应列出合适的车辆

例如: 有一个名为“Vehicle”的实体。它有一个名为makeModel的代理,其实体名称为
makeModel
。MakeModel有两个代理,分别是“make”和“model”,它们的实体名称是model和make。EntitiYes“model”和“make”都有字符串变量“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;
}
下面是我如何尝试获取车辆列表的。这里,
会话
是休眠会话

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();  
但这会返回所有车辆。 我想让所有车辆使用hibernate标准,而不是HQL


同样的问题也可以找到并参考。任何人都可以告诉我哪里出了问题,以及如何根据给定的标准检索车辆列表。

假设您正在传递函数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

结果将是一个
列表
。您可以在方法中添加一个
@SuppressWarnings(“unchecked”)
,以避免看到未经检查的强制转换警告。

问题是?你提到的答案提供了一个很好的起点。你试了什么?“我不能解决这个问题”真正的意思是什么?获得一个合适的休眠标准并不是那么难,但是如果你能为车辆提供代码并生成模型实体,那就容易多了。感谢您的关注,问题已用所有代码编辑。从文档::版本属性、标识符和关联被忽略标准返回车辆列表。我刚刚把最后一条评论写错了。它给了我很长的解释(.我不是专家,也不清楚代码的这一点
cr.createAlias(“makeModel”、“makeModel”)。createAlias(“make”、“make”)
设置别名“makeModel”可以,但“make”…因为车辆中没有make,只有makeModel有。但仍会引发异常。
org.hibernate.QueryException:无法解析属性:make of:EntityCals.Vehicle
然后我尝试了'cr.add(Restrictions.eq(“makeModel.make”,makeValue));`直接没有别名。但是引发了另一个异常
org.hibernate.QueryException:无法解析属性:makeModel.make of:EntityCls.Vehicle
我又做了一些更改。我对您为
make
选择的名称感到困惑。您有类make和字段make。您应该使用类似于用于c的东西lass
Model
,field
modelName
。请参阅我编辑的文章,也许可以尝试使用
Make class
中的
makeName
字段。完美!!!非常感谢。它很有效。我也从中学到了更多。:)但还有一件事。我们不能使用
Hibernate.Example
做同样的事情吗?