2015-05-03 3 views
2

Я собираюсь создать Criteria эквивалент этого SQL-запроса в:Критерии присоединиться к проекции

SQL:

SELECT 
    orders.id, 
    book.title, 
    orderitem.quantity 

    FROM orderitem 
    INNER JOIN book ON book.id = orderitem.book_id 
    INNER JOIN orders ON orders.id = orderitem.orders_id 

WHERE user_id = 1 

Вот мой Criteria запрос:

Criteria c = getSession().createCriteria(OrderItem.class, "oi"); 
c.setProjection(Projections.property("quantity")); 

c.createAlias("oi.book", "book"); 
c.setProjection(Projections.property("title")); 
c.createAlias("oi.orders", "or"); 
c.setProjection(Projections.property("id")); 
c.createAlias("or.user", "usr"); 

c.add(Restrictions.eq("usr.id", "1")); 
return c.list(); 

Это не исключение, но он отображает только Orders.id:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22] 

ответ

4

Использование ProjectionList. Он будет возвращать массив объектов, содержащий количество полей, заголовок, идентификатор.

Criteria c = getSession().createCriteria(OrderItem.class, "oi"); 
c.createAlias("oi.book", "book"); 
c.createAlias("oi.orders", "or"); 
c.createAlias("or.user", "usr"); 

ProjectionList proList = Projections.projectionList(); 
proList.add(Projections.property("oi.quantity")); 
proList.add(Projections.property("book.title")); 
proList.add(Projections.property("or.id")); 
c.setProjection(proList); 
c.add(Restrictions.eq("usr.id", "1")); 
return c.list(); 
1

мне нужно, чтобы получить список результатов как именованные ключи & значения, кроме индекса & значения. Я использовал следующий путь.

Criteria c = getSession().createCriteria(OrderItem.class, "oi"); 
c.createAlias("oi.book", "book"); 
c.createAlias("oi.orders", "or"); 
c.createAlias("or.user", "usr"); 

ProjectionList proList = Projections.projectionList(); 
proList.add(Projections.property("oi.quantity"), "quantity"); 
proList.add(Projections.property("book.title"), "title"); 
proList.add(Projections.property("or.id"), "id"); 
c.setProjection(proList); 

c.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); 

c.add(Restrictions.eq("usr.id", "1")); 
return c.list(); 
Смежные вопросы