Важно помнить, что HQL говорит о классах и полях, тогда как SQL говорит о таблицах и столбцах.
И если вы укажете связь, hibernate автоматически выполнит присоединения за вас. Представьте себе библиотеку классов, которая содержит список книг. Каждая книга находится в одной библиотеке.
@Entity public class Library {
@OneToMany(mappedBy"library")
public List<Book> getBooks() {
return books;
}
...
}
@Entity public class Book {
@ManyToOne
public Library getLibrary() {
return library;
}
...
}
Затем вы можете использовать hibernate, чтобы найти для вас объект библиотеки, и вам не нужно указывать какие-либо объединения. Он просто знает, что делать (хотя вы часто можете помочь ему улучшить производительность, если вы дадите ему больше подробностей).
Library library = entityManager.find(Library,1);
for (Book book : library.getBooks()) {
System.out.println("Found book: " + book.toString());
}
По моему опыту, можно сделать многое, используя hibernate, не используя вообще "join"!
Подробнее о аннотациях на http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/