Я не думаю, что вам нужен HQL (я знаю, вы спрашиваете об этом явно, но, поскольку вы говорите, что вы новичок в Hibernate, позвольте мне предложить альтернативу в стиле Hibernate). Я не одобряю HQL, потому что вы все еще имеете дело со строками, которые могут стать сложными в обслуживании, как и SQL, и вы теряете безопасность типов.
Вместо этого используйте критерии критериев гибернации и метод s для запроса ваших данных. В зависимости от вашего класса, вы можете сделать что-то вроде этого:
List patients = session.CreateCriteria(typeof(Patient.class))
.createAlias("doctor", "dr")
.add(Restrictions.Eq("dr.clinic_id", 22))
.add(Restrictions.Eq("dr.city", "abc_city"))
.list();
// go through the patients and set the properties something like this:
for(Patient p : patients)
{
p.lastName = "new lastname";
p.firstName = "new firstname";
}
Некоторые люди утверждают, что использовать CreateCriteria сложно. Правда, к этому нужно немного привыкнуть, но у него есть преимущество безопасности типов, и сложности могут быть легко спрятаны за общими классами. Google для "Hibernate Java GetByProperty", и вы понимаете, что я имею в виду.