Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:ffit:3-jahr:java:learningunits:lu10:b [2025/11/10 00:57] apeterde:modul:ffit:3-jahr:java:learningunits:lu10:b [2025/11/10 01:28] (aktuell) apeter
Zeile 47: Zeile 47:
 ==== Lazy Loading ==== ==== Lazy Loading ====
  
-Beim "objektorientierten" Ansatz wird ein sogenanntes ''Lazy Loading'' angewendet. Das heisst, es werden nicht alle verknüpften Objekte miteinander geladen, sondern nur die tatsächlich benötigten Objekte.+Beim "objektorientierten" Ansatz wird ein sogenanntes ''Lazy Loading'' angewendet. Das heisst, es werden nicht alle verknüpften Objekte zu Beginn miteinander geladen, sondern nur die tatsächlich benötigten Objekte nach und nach.
  
 <code java> <code java>
Zeile 54: Zeile 54:
 String passwordHash = account.getProject().getPasswordHash(); // Hier wird im Hintergrund automatisch das Project-Objekt geladen String passwordHash = account.getProject().getPasswordHash(); // Hier wird im Hintergrund automatisch das Project-Objekt geladen
 </code> </code>
 +
 +==== References ====
 +
 +Um ein Objekt mittels einem Objekt zu suchen oder zu löschen, muss nicht das zwingend das ganze Objekte erstellt werden, sondern lediglich die Werte der Fremdschlüssel.
 +
 +^ Operation ^ Via Join ^ Via Reference-Object ^
 +| find | <WRAP>
 +<code java>
 +List<Account> accounts = accountRepository.findByProject_ProjectName(projectName);
 +</code> 
 +</WRAP> | <WRAP>
 +<code java>
 +Project projectRef = entityManager.getReference(Project.class, projectName);
 +List<Account> accounts = accountRepository.findByProject(project);
 +</code>
 +</WRAP> |
 +| delete | <WRAP>
 +<code java>
 +accountRepository.deleteByAccountNumberAndProject_ProjectName(accountNumber, projectName);
 +</code> 
 +</WRAP> | <WRAP>
 +<code java>
 +Project projectRef = entityManager.getReference(Project.class, projectName);
 +accountRepository.deleteByAccountNumberAndProject(accountNumber, projectRef);
 +</code>
 +</WRAP> |
 +
 +Sofern man nicht eh schon ein Project-Object beziehungsweise ein Reference-Objekt hat, ist die "Project_ProjectName"-Variante empfohlen. Hat man aber bereits ein solches Objekt, kann man dieses direkt mitgeben.
 +
 +Die Reference-Objekte sind insbesondere praktisch, wenn neue Entitäten erstellt werden. Dies wird in folgendem Beispiel gezeigt.
 +
 +<code java>
 +Project projectRef = entityManager.getReference(Project.class, projectName);
 +
 +Account account = accountRepository
 +        .findByAccountNumberAndProject(accountNumber, projectRef) // Reference-Objekt kann benutzt werden, weil es eh bereits existiert.
 +        .orElse(new Account());
 +account.setAccountNumber(accountNumber);
 +account.setName(accountName);
 +account.setProject(projectRef); // Hier kann ein Reference-Objekt mitgegeben werden, ohne dass das Project-Objekt aus der DB geladen werden muss.
 +accountRepository.save(account);
 +</code>
 +
  
  
  
  • de/modul/ffit/3-jahr/java/learningunits/lu10/b.1762732639.txt.gz
  • Zuletzt geändert: 2025/11/10 00:57
  • von apeter