2011-12-24 153 views
0

我有一個產品表:如何使用hibernate將結果集從mysql映射到pojo?

Product 
- PId 
- Name 

ProductPricing 
- PPId 
- PId 
- startDate 
- endDate 
- price 

對於一個產品,可以有多個ProductPricing記錄。

用於檢索當前價格的產品,我用下面的查詢:

SELECT PId, Name, price, startDate, endDate 
FROM PRODUCT, PRODUCTPRICING 
WHERE PRODUCT.PId = givenId AND PRODUCT.PId = PRODUCTPRICING.PId 
AND (today() > PRODUCTPRICING.startDate AND today() < PRODUCTPRICING.endDate); 

如何映射使用Hibernate此查詢到我的POJO的結果?

我的Java產品對象看起來是這樣的:

Product 
- Id 
- Name 
- ProductPricing Object 

ProductPricing 
- startDate 
- endDate 
- price 

回答

1

這會給出一個稍微不同的查詢(用一個子查詢代替連接),但結果應該是一樣的。

@Entity 
class Product 
{ 
@Id 
int id; 
String name; 
@Formula("(select pp.price from PRODUCTPRICING pp where pp.PId = id and today() > pp.startDate AND today() < pp.endDate)") 
double price; 
} 

如果你想在ProductPricing映射爲一個POJO,我也認爲你不能將它映射爲一個對一個,因爲它在技術上是一個一對多的一個過濾器,將希望導致只​​有一個結果。所以,你將擁有一個集< ProductPricing>在您的產品類別:

<set name="prices" table="PRODUCTPRICING"> 
    <key column="PId"/> 
    <composite-element class="ProductPricing"> 
    <property name="price"/> 
    <property name="startdata"/> 
    <property name="enddate"/> 
    </composite-element> 
    <filter condition="today() > startDate AND today() < endDate"/> 
</set> 

複合元素,你並不需要一個主鍵PPID在PRODUCTPRICING表。

+0

使用基於XML的配置可以做到這一點嗎?此外,我稍微編輯了問題以代替映射ProductPricing對象。你能解釋一下,如果字段可以被映射來創建一個子對象嗎? – brainydexter 2011-12-24 10:40:36