Столбцы SqlResultSetMapping как и сущности

Я действительно запутался, как работает сопоставление набора результатов столбца? Что я сопоставляю, когда использую столбцы вместо сущностей? Посмотрите на этот пример...

Query q = em.createNativeQuery(
       "SELECT o.id AS order_id, " +
           "o.quantity AS order_quantity, " +
           "o.item AS order_item, " + 
           "i.name AS item_name, " +
         "FROM Order o, Item i " +
         "WHERE (order_quantity > 25) AND (order_item = i.id)",
       "OrderResults");

   @SqlResultSetMapping(name="OrderResults",
       entities={
           @EntityResult(entityClass=com.acme.Order.class, fields={
               @FieldResult(name="id", column="order_id"),
               @FieldResult(name="quantity", column="order_quantity"),
               @FieldResult(name="item", column="order_item")})},
       columns={
           @ColumnResult(name="item_name")}
       )

Я могу понять, что он пытается здесь сделать, результатом Entity будет тот набор результатов, который он хочет, поля попытаются сопоставить поля с псевдонимами, какого черта делают результаты столбца? Не похоже, что он сопоставляется с чем-либо.


person SoftwareSavant    schedule 12.07.2012    source источник


Ответы (1)


Вы сопоставляете 4 поля из набора результатов с 2 классами Java: первый класс - это объект Order, а второй - (вероятно) String, который должен содержать поле db "item_name".

DB:                         Java
---                         ----
order_id              --->  \
order_quantity        --->  Order entity
order_item            --->  /
item_name             --->  String

Чтобы прочитать результаты запроса:

for (Object[] record : query.getResultList()) {
   Order order = (Order)record[0];
   String itemName = (String)record[1];
}
person gamliela    schedule 05.11.2013