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

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

最佳答案

这将给出略有不同的查询(使用子查询而不是联接),但结果应该是相同的。

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

相关文章:

php - 删除用户 > 还需要删除他们的项目,然后删除该项目的事件吗?

java - 数据库连接超时

java - 在 JTextArea 中突出显示选定的行

Java Arraylist 删除对象

Python:QSqlDatabase:QMYSQL 驱动程序未加载

c++ - 在 mysql db c++ 中存储 blob 数据的语法

mysql - 如何强制Hibernate添加ID列来插入查询?

java - TransactionRequiredException 执行更新/删除查询

java - Java ConcurrentHashMap computeIfAbsent() 方法是否支持基于键的 "locking"?

java - 当我切换选项卡时 JXMultiSplitPane 变得疯狂