如何使用hibernate将结果集从mysql映射到pojo?

时间:2011-12-24 10:16:32

标签: java mysql hibernate 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对象如下所示:

Product
- Id
- Name
- ProductPricing Object

ProductPricing
- startDate
- endDate
- price

1 个答案:

答案 0 :(得分: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,我认为您无法将其映射为一对一,因为从技术上讲,它是一对多的过滤器,希望仅产生一个一个结果。所以你将有一个Set&lt; ProductPricing&gt;在您的产品类中:

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

使用composite-element,您不需要PRODUCTPRICING表中的主键PPId。