1
Как я могу преобразовать этот PostGreSQL запрос в спящем запрос:Hibernate запрос на группы по
select sum(amount), cat_id,
date_trunc('month', createOn) as month,
date_trunc('year', createOn) as year
from item
where owner_id = 1
group by cat_id , month, year;
У меня есть класс Item, как:
@Column(name="AMOUNT")
private BigDecimal amount;
@ManyToOne
@JoinColumn(name="OWNER_ID")
private Customer owner;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="CAT_ID")
private Category category;
@Temporal(TemporalType.DATE)
@Column(name="CREATEON")
private Date createOn;
Я стараюсь, чтобы преобразовать его в:
StringBuffer hql = new StringBuffer()
.append("Select sum(amount), category, month(createOn) as mon, year(createOn) as year")
.append(" from Item")
.append(" where owner=:owner")
.append(" group by category, mon, year");
Query query = getQuery(hql.toString())
.setParameter("owner", owner);
List<Object[]> resultList = query.list();
List<BundleHolder> bundleHolderList = new ArrayList<BundleHolder>();
for(Object[] result : resultList) {
BundleHolder instance = BundleHolder.getInstance();
instance.setAmount((BigDecimal) result[0]);
instance.setCategory((Category) result[1]);
instance.setMonth((int) result[2]);
instance.setYear((int) result[3]);
bundleHolderList.add(instance);
}
Когда я запустил запрос, у меня была ошибка:
ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ERROR: column "category" does not exist
Я пытаюсь переключить категорию на cat_id или владельца на owner_id (установить параметр owner.getId()), но это тоже не помогает.
Используйте псевдоним, как 'Выберите сумму (item.amount), item.category, месяц (item.createOn) как пн, год (item.createOn) как год с пункта item item item.owner =: группа владельца по item.category, mon, year'. (Позже, отбросьте 'FetchType.EAGER' и используйте другие схемы, такие как объединения fetch). – Tiny
Спасибо, я попробовал вам запрос, но он жаловался, что мне нужно иметь item.category.id в группе. Поэтому я исправил это, изменив item.category -> item.category.id в Select и Group by. Результат увлечен. Благодарим за ваше предложение. –