我有一个产品表:
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
最佳答案
这将给出略有不同的查询(使用子查询而不是联接),但结果应该是相同的。
@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,我认为您不能将其映射为一对一,因为从技术上讲,它是带有过滤器的一对多,希望只产生结果一个结果。因此,您的 Product 类中将有一个 Set
<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。
关于java - 如何使用hibernate将结果集从mysql映射到pojo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8623908/