Reputation: 669
How could I rewrite SQL query showed below into HQL? I would like to use javax.persistence.Query
SELECT COUNT(DISTINCT(book_id, author_id)) FROM dbo.book bo
LEFT JOIN dbo.author au ON au.id = bo.author_id
LEFT JOIN dbo.publisher pu ON pu.id = bo.publisher_id
WHERE pu.id = 777
My attempt which does not work:
SELECT COUNT(DISTINCT(bl.id, o.id)) FROM PRDAuthor as o
LEFT JOIN FETCH o.bookList as bl
WHERE bl.publisher.id = 777
EDIT: I am attaching my entities
PRDAuthor
public class PRDAuthor {
// ...
@OneToMany(orphanRemoval = true, mappedBy = "author", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@BatchSize(size = 100)
private List<PRDBook> bookList = new ArrayList<>();
// ...
}
PRDBook
public class PRDBook {
// ...
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@BatchSize(size = 30)
private PRDAuthor author;
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@BatchSize(size = 30)
private PRDPublisher publisher;
// ...
}
PRDPublisher
public class PRDPublisher {
// ...
@OneToMany(orphanRemoval = true, mappedBy = "publisher", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@BatchSize(size = 100)
private List<PRDBook> bookList = new ArrayList<>();
// ...
}
Upvotes: 2
Views: 488
Reputation: 2993
You can count only by one field Try this one (not tested):
SELECT COUNT(DISTINCT(*)) FROM PRDAuthor as o
LEFT JOIN FETCH o.bookList as bl
WHERE bl.publisher.id = 777
Upvotes: 1