2011-12-29 55 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

相關問題