我有一张产品表:
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
??
我的Java Product对象如下所示:
Product
- Id
- Name
- ProductPricing Object
ProductPricing
- startDate
- endDate
- price
答案 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。