У меня есть два класса, хранящихся в моей базе данных с использованием Hibernate.Давайте назовем их Container
и Item
.Элемент имеет отношение «один ко многим» к контейнеру:
@entity(name = "containers")
public class Container {
@Id
@GeneratedValue
private long id;
}
@entity(name = "items")
public class Item {
@Id
@GeneratedValue
private long id;
@ManyToOne
@JoinColumn(name = "container_id")
private Container container;
}
Я хочу выбрать «выбрать все» для всех элементов кортежа [ (long)item.id, (long)item.container_id ]
, но Hibernate, похоже, настаивает на получении [ (long)item.id, (Container)item.container ]
, представляя бесполезный(и дорого) присоединиться.
Я пробовал этот критерий запроса:
Criteria criteria = session.
createCriteria(Link.class).
add(Restrictions.isNotNull("container")).
setProjection(Projections.projectionList().
add(Projections.id()).
add(Projections.property("container")));
Есть ли соответствующий критерий запроса.Должно быть возможно без запросов HQL или собственных запросов SQL, не так ли?
Редактировать 1: Рабочий запрос HQL:
session.createQuery("SELECT item.id, item.container.id " +
"FROM items AS item " +
"WHERE item.container <> NULL")
Редактировать 2: FetchType.LAZY не вариант.