Это классы Country
и State
:
Страна:
@Entity
@Table(name="Country")
public class Country{
@Id
private String countryName;
private String currency;
private String capital;
@OneToMany(mappedBy="country", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
private List<State> statelist = new ArrayList<State>();
Состояние:
@Entity
@Table(name="State")
public class State{
@Id
private String stateName;
private String language;
private long population;
@ManyToOne
@JoinColumn(name="countryName")
private Country country;
Каким должен быть HQL-запрос к получить штаты (возможно, в списке) с наибольшим населением в конкретной стране?
Вот код, который я написал, где я сначала попытался получить максимальное значение населения, а затем прогнать все штатов в этой стране для сопоставления с каждым значением численности населения и добавления штатов в список. Но при этом я получаю сообщение об ошибке, что столбцы в запросе определены неоднозначно.
public List<State> stateWithMaxPopulation(String countryName){
List<State> l = new ArrayList<State>();
Country ctr = (Country)session.get(Country.class,countryName);
String hql = "select max(stlst.population) from Country cntry "
+" join cntry.statelist stlst where countryName=:cNm";
Query query = session.createQuery(hql);
query.setParameter("cNm", countryName);
Long maxPop = (Long)query.uniqueResult();
for(State st : ctr.getStatelist()){
if(st.getPopulation() == maxPop)
l.add(st);
}
return l;
}
Каким должен быть правильный способ сделать это?