2011-12-29 59 views
1

我试图在桌子上创建一个订单,其中一个项目是'订购'碰巧是一个属性,在一端的关系。 我是否通过的名称指定了属性属性名称(在外表中)或表名? 目前有: order = new Order[]{Order.asc("lastControlDate"), Order.asc("idManufacturer"), Order.asc("model")};其中idManufacturer是外键 感谢如何用另一个表中的属性创建一个hibernate命令?

的实体是厂商1..M汽车,其中:

厂商:

public class Manufacturer{ 
    private Long idManufacturer; 
    private String name; 

//<editor-fold defaultstate="collapsed" desc="Constructors"> 
public Manufacturer(){ 
//getters and setters.... 

} 

爱车:

public class Car { 
private long idCar; 
private String model; 
private Manufacturer manufacturer; 
//Constructor, getters and setters... 
} 

order = new Order [] {Order.desc(“manufacturer”),Order.desc(“model”)};

public static List<Car> listCarsByManufacturer(Manufacturer name, Order...orders)throws Exception{ 
     LinkedList<Criterion> criterions = new LinkedList<Criterion>(); 
     criterions.add(Restrictions.like("Car.manufacturer", name)); 

     List<Car> cars =carDAO.findAllCars(criterions, orders); 
     return cars; 
} 
+0

HQL和Criteria从不使用表名和列名。他们在实体上工作。其余的,请告诉我们你的实体和你的查询,如果你需要帮助。 – 2011-12-29 10:32:33

回答

2

您还没有向我们显示该查询,请致电CarDAO.findAllCars()

总之,这里是你如何让汽车的清单对他们的制造商名的retriction和订单上的制造商ID:

Criteria c = session.createCriteria(Car.class, "car"); 
// to add a restriction on a property of manufacturer, you need 
// an inner join on manufacturer 
c.createAlias("car.manufacturer", "manufacturer"); 
c.add(Restrictions.like("manufacturer.name", name)); 
// you want to get the car with their manufacturer, so you need a fetch 
c.setFetchMode(car.manufacturer", FetchMode.JOIN); 
// you want to order by id of manufacturer 
c.addOrder(Order.asc("manufacturer.idManufacturer")); 

所有这一切都在Hibernate reference manual很好的解释。

+0

对不起。我没有考虑到那部分。这是一个相当重的分层的旧的继承项目。在我不得不离开之前,我正在提取相关部分,但你回答了我的问题。我只需要知道如何指定'要订购的财产',如果它是一个外键。再次感谢。 – 2011-12-29 21:25:17

相关问题