Как отобразить набор результатов из MySQL в Pojo с помощью Hibernate? - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть таблица товаров:

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

Как мне сопоставить результат этого запроса с моим POJO, используя Hibernate ??

мой объект Java Product выглядит примерно так:

Product
- Id
- Name
- ProductPricing Object

ProductPricing
- startDate
- endDate
- price

1 Ответ

1 голос
/ 24 декабря 2011

Это даст немного другой запрос (с подзапросом вместо объединения), но результат должен быть таким же.

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

С составным элементом вам не нужен первичный ключ PPId в таблице PRODUCTPRICING.

...