Ich lese, dass getOne()
ist lazy geladen und findOne()
holt das ganze Wesen sofort. Ich habe das Debugging-Protokoll überprüft und ich habe sogar die Überwachung auf meinem SQL-Server aktiviert, um zu sehen, welche Anweisungen ausgeführt werden. Ich habe festgestellt, dass sowohl getOne()
als auch findOne()
die gleiche Abfrage generiert und ausführt. Wenn ich jedoch getOne()
verwende, sind die Werte anfangs null (außer für die ID natürlich).Unterschied zwischen CrudRepository findOne() und JpaRepository getOne()
Könnte mir bitte jemand sagen, wenn beide Methoden die gleiche Abfrage auf der Datenbank ausführen, warum sollte ich eine über die andere verwenden? Ich bin im Grunde auf der Suche nach einer Möglichkeit, eine Entität zu holen, ohne alle seine Kinder/Attribute zu bekommen.
EDIT1:
Dao Code:
@Repository
public interface FlightDao extends JpaRepository<Flight, Long> {
}
Debugging log findOne() vs getOne()
EDIT2:
Dank Chlebik konnte ich das Problem identifizieren. Wie Chlebik sagte, wenn Sie versuchen, auf eine Eigenschaft der Entität zuzugreifen, die von getOne()
abgerufen wird, wird die vollständige Abfrage ausgeführt. In meinem Fall habe ich das Verhalten während des Debuggens überprüft und dabei Zeile um Zeile verschoben. Ich habe total vergessen, dass beim Debuggen der IDE versucht wird, auf Objekteigenschaften für Debugging-Zwecke zuzugreifen (oder zumindest das ist, was ich denke), also Debugging-Trigger die vollständige Abfrageausführung. Ich habe das Debuggen gestoppt und dann die Logs überprüft und alles scheint normal zu sein.
getOne()
vs findOne()
(Dieses Protokoll von MySQL genommen wird general_log
und überwintert nicht.
Dank für die Informationen. Was 'getOne()' tatsächlich tut, ist 'getReference()' aufzurufen. Ich bin wirklich verwirrt, weil, wie ich bereits erwähnt habe, beide Methoden die gleiche Abfrage generiert und ausgeführt haben! Vielleicht hat es mit MySQL zu tun, wie du es gesagt hast? Ich wünschte wirklich, dass jemand das bestätigen kann. Haben Sie eine Idee, ob die Abfrage in einem normalen Szenario zwischen den beiden Methoden unterschiedlich sein sollte? – prettyvoid
Der Verkäufer meint nicht zB. MySQL aber Hibernate/TopLink/was auch immer Sie verwenden. Ich gehe davon aus, dass die Ausführung einer Anfrage auf definierten Beziehungen in Ihren Entitäten basiert und wahrscheinlich durch die JPA-Implementierung optimiert wird. IMHO mit einfacher Entität gibt es keinen großen Unterschied zwischen dem Abrufen des Handlers zu einer Entität (wie bei ** getReference **) und dem tatsächlichen Abrufen aller Daten. – Chlebik
Ich muss eine Referenz bekommen, weil die Entitäten, die ich zu holen versuche, viele Sub-Entities haben, es ist eine Menge Arbeit das Ganze zu holen, wenn ich nur die ID der Entity benötige. Warten wir eine Weile, vielleicht kann uns jemand sagen, was passiert. Danke nochmal – prettyvoid