Hibernate Implicit joins (path expressions)

0

Mamy w hibernate coś takiego

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#hql-implicit-join
czyli można sobie przechodzi po kropce przez relacje, jednak to generuje jakiegoś kiepskiego SQL'a

Dla HQL

SELECT sd.num, sd.owner.name
FROM SaleDocument sd
WHERE  sd.owner.name = :name

mamy SQL

SELECT sd.num, o.name
FROM SALE_DOCUMENT sd, OWNER o
WHERE sd.ID_OWNER = o.ID_OWNER AND o.name =?

gdzie są inner/outer joiny w sytuacji kiedy w tabeli SaleDocument mam 70 lmn wierszy to przejoinowanie tego to jakas masakra, koszta zapytania 140 tys

a dla HQL

SELECT sd.num, o.name
FROM SaleDocument sd JOIN sd.owner o
WHERE  o.name = :name

mamy SQL

SELECT sd.num, o.name
FROM SALE_DOCUMENT sd INNER JOIN OWNER o ON sd.ID_OWNER = o.ID_OWNER 
WHERE  o.name =?

koszt zapytania 70 czyli 2000x lepiej baza PostgreSQL, oczywiście SQL są bardziej skomplikowane ale prezentują problem

Czy korzystacie z Implicit joins (path expressions) ?? Bo z naszych doświadczeń zawsze lepiej pisać joiny jawnie....

0

Można używać czegoś takiego jak FetchProfile

0

Implicit joins po stronie SQLa nie powinny mieć wpływu na wydajność zapytań. Plan powinien być identyczny. I tu zaczynam się zastanawiać czy to problem HQLa, czy jednak po stronie bazy dzieje się jakaś niedobra magia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1