<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Komentarze do: Hibernate i problem N + 1 zapytań	</title>
	<atom:link href="https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/feed/" rel="self" type="application/rss+xml" />
	<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/</link>
	<description>Blog o programowaniu w Javie</description>
	<lastBuildDate>Fri, 04 Aug 2023 17:06:22 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>
		Autor: Mateusz Dąbrowski		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-4054</link>

		<dc:creator><![CDATA[Mateusz Dąbrowski]]></dc:creator>
		<pubDate>Wed, 25 May 2022 15:29:55 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-4054</guid>

					<description><![CDATA[W odpowiedzi do &lt;a href=&quot;https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-4053&quot;&gt;TomWaks&lt;/a&gt;.

Pozwala. Możesz łączyć ile tabel chcesz za pomocą join fetch, tylko nie możesz używać do tego List, bo dostaniesz błąd. Najprościej zmienić listę na Set i to pomoże pozbyć się błędu. Ale z kolei możesz wpaść w kolejną pułapkę, czyli problem iloczynu kartezjańskiego. Zarówno problem iloczynu kartezjańskeigo jak i problem n+1. Omawiam w moim kursie Hibernate i JPA, szczegóły znajdziesz &lt;a href=&quot;https://kursy.nullpointerexception.pl/hibernate/&quot; rel=&quot;nofollow ugc&quot;&gt;tutaj&lt;/a&gt;]]></description>
			<content:encoded><![CDATA[<p>W odpowiedzi do <a href="https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-4053">TomWaks</a>.</p>
<p>Pozwala. Możesz łączyć ile tabel chcesz za pomocą join fetch, tylko nie możesz używać do tego List, bo dostaniesz błąd. Najprościej zmienić listę na Set i to pomoże pozbyć się błędu. Ale z kolei możesz wpaść w kolejną pułapkę, czyli problem iloczynu kartezjańskiego. Zarówno problem iloczynu kartezjańskeigo jak i problem n+1. Omawiam w moim kursie Hibernate i JPA, szczegóły znajdziesz <a href="https://kursy.nullpointerexception.pl/hibernate/" rel="nofollow ugc">tutaj</a></p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: TomWaks		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-4053</link>

		<dc:creator><![CDATA[TomWaks]]></dc:creator>
		<pubDate>Wed, 25 May 2022 15:13:06 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-4053</guid>

					<description><![CDATA[Bardzo ciekawe opracowanie.

Zalecane jest rozwiązanie przy wykorzystaniu join fetch.

Co w przypadku gdy musimy dołączyć więcej niż jedną tabelę.

Załóżmy dodanie do User&#039;a:
@OneToMany
@JoinColumn(name = &quot;detailId&quot;)
private List details;


W repozytorium:

@Override
@Query(&quot;select distinct u from JoinFetchUser u join fetch u.addresses join fetch u.details&quot;)
List findAll();

Niestety to nie zadziała, ponieważ join fetch nie pozwala na łączenie 3 tabel.

Jakie rozwiązanie w takim przypadku zastosować?]]></description>
			<content:encoded><![CDATA[<p>Bardzo ciekawe opracowanie.</p>
<p>Zalecane jest rozwiązanie przy wykorzystaniu join fetch.</p>
<p>Co w przypadku gdy musimy dołączyć więcej niż jedną tabelę.</p>
<p>Załóżmy dodanie do User&#8217;a:<br />
@OneToMany<br />
@JoinColumn(name = &#8222;detailId&#8221;)<br />
private List details;</p>
<p>W repozytorium:</p>
<p>@Override<br />
@Query(&#8222;select distinct u from JoinFetchUser u join fetch u.addresses join fetch u.details&#8221;)<br />
List findAll();</p>
<p>Niestety to nie zadziała, ponieważ join fetch nie pozwala na łączenie 3 tabel.</p>
<p>Jakie rozwiązanie w takim przypadku zastosować?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: Fan12		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2177</link>

		<dc:creator><![CDATA[Fan12]]></dc:creator>
		<pubDate>Tue, 13 Oct 2020 19:19:07 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2177</guid>

					<description><![CDATA[Super odcinek, jak i inne zresztą też.
Kompleksowo wyjaśniony problem i zaprezentowane najbardziej naturalne rowiązanie.]]></description>
			<content:encoded><![CDATA[<p>Super odcinek, jak i inne zresztą też.<br />
Kompleksowo wyjaśniony problem i zaprezentowane najbardziej naturalne rowiązanie.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: kret11		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2159</link>

		<dc:creator><![CDATA[kret11]]></dc:creator>
		<pubDate>Wed, 07 Oct 2020 12:50:42 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2159</guid>

					<description><![CDATA[W odpowiedzi do &lt;a href=&quot;https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2131&quot;&gt;Mateusz Dąbrowski&lt;/a&gt;.

jeden select po encję bazową i po jednym seleccie na każde encje -to-Many, które mamy pobrać. potem zlepianie w całość w jakiś projekcjach czy view modelach. dzięki temu możemy ogranicznyć ilość zapytań do X+1, gdzie X to ilość kolekcji do pobrania. działa nawet dla bardzo dużych list. niestety, wymaga ręcznej pracy.]]></description>
			<content:encoded><![CDATA[<p>W odpowiedzi do <a href="https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2131">Mateusz Dąbrowski</a>.</p>
<p>jeden select po encję bazową i po jednym seleccie na każde encje -to-Many, które mamy pobrać. potem zlepianie w całość w jakiś projekcjach czy view modelach. dzięki temu możemy ogranicznyć ilość zapytań do X+1, gdzie X to ilość kolekcji do pobrania. działa nawet dla bardzo dużych list. niestety, wymaga ręcznej pracy.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: Mateusz Dąbrowski		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2144</link>

		<dc:creator><![CDATA[Mateusz Dąbrowski]]></dc:creator>
		<pubDate>Mon, 05 Oct 2020 06:39:08 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2144</guid>

					<description><![CDATA[W odpowiedzi do &lt;a href=&quot;https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2140&quot;&gt;Korges&lt;/a&gt;.

Można też tak <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tak naprawdę jest kilka sposobów na rozwiązanie tego problemu w Hibernate.]]></description>
			<content:encoded><![CDATA[<p>W odpowiedzi do <a href="https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2140">Korges</a>.</p>
<p>Można też tak 😉 Tak naprawdę jest kilka sposobów na rozwiązanie tego problemu w Hibernate.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: Korges		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2140</link>

		<dc:creator><![CDATA[Korges]]></dc:creator>
		<pubDate>Sun, 04 Oct 2020 18:19:44 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2140</guid>

					<description><![CDATA[Ostatnio natrafiłem na rozwiązanie palącego problemu N+1. 
Normalnie zachowujemy nasze fetch = FetchType.LAZY, z tym że nadpisujemy metode z repozyturium i nad nią dodajemy adnotacje @EntityGraph, definiując dodatkowo pole które chcemy &quot;zgrafować&quot;. Dzięki czemu Hibernate sam za nas zrobi LEFT OUTER JOIN, wykonując wszystko w jednym zapytaniu :)

adnotacja z pakietu org.springframework.data.jpa.repository.EntityGraph;]]></description>
			<content:encoded><![CDATA[<p>Ostatnio natrafiłem na rozwiązanie palącego problemu N+1.<br />
Normalnie zachowujemy nasze fetch = FetchType.LAZY, z tym że nadpisujemy metode z repozyturium i nad nią dodajemy adnotacje @EntityGraph, definiując dodatkowo pole które chcemy &#8222;zgrafować&#8221;. Dzięki czemu Hibernate sam za nas zrobi LEFT OUTER JOIN, wykonując wszystko w jednym zapytaniu 🙂</p>
<p>adnotacja z pakietu org.springframework.data.jpa.repository.EntityGraph;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: Mateusz Dąbrowski		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2131</link>

		<dc:creator><![CDATA[Mateusz Dąbrowski]]></dc:creator>
		<pubDate>Sat, 03 Oct 2020 07:03:54 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2131</guid>

					<description><![CDATA[W odpowiedzi do &lt;a href=&quot;https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2130&quot;&gt;kret11&lt;/a&gt;.

Po prostu rozwiązując jeden problem, napotkałeś na inny. Join Fetch sam w sobie nie jest źródłem problemu. Jeśli twoje zapytanie prowadzi do &quot;eksplozji&quot; to prawdopodobnie zapytanie zwraca produkt kartezjański(iloczyn kartezjański) i takie zachowanie jest specyficzne dla baz danych, po prostu tak baza zwraca wyniki złączeń. Nie ma co winić join fetcha <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />

Rozwiązanie to podzielenie jednego wielkiego zapytania, na kilka mniejszych z join Fetchami. Ale najpierw polecam poczytać skąd bierze się ten problem.]]></description>
			<content:encoded><![CDATA[<p>W odpowiedzi do <a href="https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2130">kret11</a>.</p>
<p>Po prostu rozwiązując jeden problem, napotkałeś na inny. Join Fetch sam w sobie nie jest źródłem problemu. Jeśli twoje zapytanie prowadzi do &#8222;eksplozji&#8221; to prawdopodobnie zapytanie zwraca produkt kartezjański(iloczyn kartezjański) i takie zachowanie jest specyficzne dla baz danych, po prostu tak baza zwraca wyniki złączeń. Nie ma co winić join fetcha 😉</p>
<p>Rozwiązanie to podzielenie jednego wielkiego zapytania, na kilka mniejszych z join Fetchami. Ale najpierw polecam poczytać skąd bierze się ten problem.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: kret11		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2130</link>

		<dc:creator><![CDATA[kret11]]></dc:creator>
		<pubDate>Fri, 02 Oct 2020 22:42:22 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2130</guid>

					<description><![CDATA[rozwiązanie z join fetchem prowadzi do &quot;eksplozji&quot; wyników, hibernate nawet rzuca warning w tym wypadku. dla większych listingów to rozwiązanie absolutnie nie jest optymalne.]]></description>
			<content:encoded><![CDATA[<p>rozwiązanie z join fetchem prowadzi do &#8222;eksplozji&#8221; wyników, hibernate nawet rzuca warning w tym wypadku. dla większych listingów to rozwiązanie absolutnie nie jest optymalne.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: Mateusz Dąbrowski		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2013</link>

		<dc:creator><![CDATA[Mateusz Dąbrowski]]></dc:creator>
		<pubDate>Fri, 21 Aug 2020 10:51:04 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2013</guid>

					<description><![CDATA[W odpowiedzi do &lt;a href=&quot;https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2012&quot;&gt;princeofpilot&lt;/a&gt;.

&quot;Unikalność wyników możemy zapewnić na dwa sposoby:&quot;, a po wypunktowaniu jest napisane &quot;Ja skorzystam ze słowa kluczowego distinct&quot; - te dwa sposoby są rozłączne, nie musisz korzystać z tego i tego (ale oczywiście możesz).]]></description>
			<content:encoded><![CDATA[<p>W odpowiedzi do <a href="https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2012">princeofpilot</a>.</p>
<p>&#8222;Unikalność wyników możemy zapewnić na dwa sposoby:&#8221;, a po wypunktowaniu jest napisane &#8222;Ja skorzystam ze słowa kluczowego distinct&#8221; &#8211; te dwa sposoby są rozłączne, nie musisz korzystać z tego i tego (ale oczywiście możesz).</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Autor: princeofpilot		</title>
		<link>https://nullpointerexception.pl/hibernate-i-problem-n-plus-1-zapytan/#comment-2012</link>

		<dc:creator><![CDATA[princeofpilot]]></dc:creator>
		<pubDate>Fri, 21 Aug 2020 10:14:20 +0000</pubDate>
		<guid isPermaLink="false">http://nullpointerexception.pl/?p=704#comment-2012</guid>

					<description><![CDATA[Przy JoinFetchu napisałeś : &quot;Zamiast zwracać listę użytkowników, zwracamy Set (będziemy musieli zrobić nową metodę w repozytorium użytkowników)&quot;, a w kodzie widzę dalej Listę..?]]></description>
			<content:encoded><![CDATA[<p>Przy JoinFetchu napisałeś : &#8222;Zamiast zwracać listę użytkowników, zwracamy Set (będziemy musieli zrobić nową metodę w repozytorium użytkowników)&#8221;, a w kodzie widzę dalej Listę..?</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
