2013-03-23 3 views
0

У меня есть не-сущность классаГраф объекты в нескольких таблицах

public class CountryStatistics { 

    public CountryStatistics(Long numTowns, Long numVillages) { 
    ... 
    } 

} 

Для данной страны я хочу построить объект статистики.

Страна, деревня и город являются сущностями, поэтому я пробовал вещи в соответствии с приведенным ниже кодом.

String queryString = 
"SELECT NEW mypackage.CountryStatistics(count(t), count(v)) 
FROM Town t, Village v WHERE t.country = :country AND v.country = :country" 

TypedQuery<CountryStatistics> query = 
em.createQuery(queryString ,CountryStatistics.class).setParameter("country", country); 

query.getSingleResult() 

Вопрос: Каков правильный способ подсчета некоторых объектов в разных таблицах в одном запросе?

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

"SELECT NEW mypackage.CountryStatistics(count(distinct t), count(v)) 
FROM Town t, Village v WHERE t.country = :country AND v.country = :country" 

Но если я устанавливаю его для сел и я получаю:

java.sql.SQLSyntaxErrorException: Multiple DISTINCT aggregates are not supported at this time. 
+0

Вы не говорите, что проблема в. –

+0

Ах, правда, добавлено еще одно объяснение –

+0

Похоже, ваша база данных не поддерживает несколько разных агрегатов. Какая база данных? PostgreSQL поддерживает это просто отлично. –

ответ

2

Следующий запрос (не проверено) должны делать то, что вы хотите:

select count(distinct t.id), count(distinct v.id) from Country c 
left join c.towns t 
left join c.villages v 
where c.id = :countryId 
+0

В моем сценарии Страна не имеет собственности .towns –

+0

Запрос в ваших обновленных вопросах с двумя отдельными статьями должен работать нормально. Это похоже на ограничение вашей базы данных. –

Смежные вопросы