2011-12-24 2 views
0

私は、製品のテーブルを持っている:1つの製品の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; 
} 

あなたも、POJOとしてProductPricingをマッピングする場合、私はそれがどの意志フィルタと1対多の技術的なので、あなたが、1対1として、それをマップすることはできませんだと思いますうまくいけば、結果は1つだけです。

<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> 

複合要素では、あなたがPRODUCTPRICINGテーブルの主キーPPIDは必要ありません。つまり、あなたのProductクラスのSet < ProductPricing>を持っています。

+0

これはXMLベースの設定を使用して行うことはできますか?また、私は少し質問を編集してProductPricingオブジェクトをマッピングしました。サブオブジェクトを作成するためにフィールドをマップできるかどうか説明してください。 – brainydexter

関連する問題