JPA Hibernate und JDBC?
JDBC ist eine Low-Level-API, bei der SQL-Abfragen manuell formuliert werden müssen. JPA abstrahiert das über ORM, sodass man mit Entitäten arbeitet. Das Framework wie Hibernate generiert das SQL automatisch.
Was ist JPA und was ist der Unterschied zu Hibernate?
JPA ist die Spezifikation für objekt-relationales Mapping in Java. Hibernate ist eine Implementierung dieser Spezifikation. Man kann sagen: JPA ist das Interface, Hibernate die konkrete Umsetzung.
Relationale und nicht-relationale Datenbank?
Relationale Datenbanken speichern Daten in Tabellen mit Beziehungen. Nicht-relationale Datenbanken speichern unstrukturierte oder halbstrukturierte Daten. Relationale Systeme bieten starke Konsistenz, NoSQL-Systeme mehr Skalierbarkeit und Flexibilität.
Statement PreparedStatement und CallableStatement?
Statement wird für statische SQLs ohne Parameter verwendet. PreparedStatement ist wiederverwendbar, unterstützt Parameter und schützt vor SQL-Injection. CallableStatement dient zum Aufruf von Stored Procedures.
Wie würden Sie JPA in einer Microservice-Architektur einsetzen?
Jeder Microservice verwaltet seine eigene Datenbank. Daten werden nicht über geteilte Tabellen ausgetauscht. Die Kommunikation erfolgt über REST oder Messaging.
Wie können Sie mit großen Datenmengen effizient umgehen?
Ich nutze Pagination oder Streaming, um Speicher zu schonen. Zusätzlich kann man Batch-Inserts konfigurieren. Das erhöht die Performance bei großen Datenmengen.
N+1-Select-Problem und wie kann man es vermeiden?
Das Problem entsteht, wenn für jede Entität eine zusätzliche Query ausgeführt wird. Man kann es mit JOIN FETCH, EntityGraph oder Batch-Fetching lösen.
Wie handhaben Sie Transaktionen in JPA?
Spring Data nutzt deklaratives Transaktionsmanagement mit @Transactional. Alle Operationen innerhalb der Methode laufen in einer Transaktion. Bei Fehlern erfolgt automatisch ein Rollback.
Wie funktioniert das Caching in JPA Hibernate?
JPA besitzt einen First-Level-Cache pro EntityManager. Hibernate bietet zusätzlich einen optionalen Second-Level-Cache. Dadurch werden Datenbankabfragen reduziert.
Was ist der Entity Lifecycle in JPA?
Eine Entität durchläuft die Zustände Transient, Managed, Detached und Removed. Der EntityManager steuert diese Zustände automatisch.
Unterschied zwischen persist merge und save?
persist fügt eine neue Entität hinzu. merge aktualisiert oder kopiert eine bestehende Entität. save ist ein Spring-Data-Wrapper, der intern persist oder merge nutzt.
Lazy Loading und Eager Loading in JPA?
Lazy Loading lädt abhängige Entitäten erst bei Bedarf. Eager Loading lädt alle Beziehungen sofort. Eager Loading kann zu Performanceproblemen führen.
Unterschied zwischen EntityManager und Repository?
Der EntityManager ist Teil der JPA-Spezifikation. Ein Repository ist eine Spring-Data-Abstraktion darüber. Es vereinfacht CRUD-Operationen erheblich.
Was ist eine Entity in JPA?
Eine Entity ist ein persistentes Java-Objekt, das eine Datenbanktabelle repräsentiert. Sie wird mit @Entity markiert. Der Zustand der Entity wird vom EntityManager verwaltet.
Was ist der Persistence Context?
Der Persistence Context ist der Arbeitsbereich des EntityManagers. Er verwaltet Entities und dient als First-Level-Cache. Änderungen werden automatisch synchronisiert.
Was ist Dirty Checking?
Hibernate erkennt automatisch Änderungen an verwalteten Entities. Beim Flush werden diese Änderungen in SQL übersetzt. Manuelles Update ist nicht nötig.
Was ist ein Flush?
Flush synchronisiert den Persistence Context mit der Datenbank. SQL-Statements werden ausgeführt, aber nicht committed. Commit beendet die Transaktion.
Was ist Optimistic Locking?
Optimistic Locking nutzt Versionsfelder zur Konflikterkennung. Es verhindert Datenverlust bei parallelen Zugriffen. Datenbanksperren werden vermieden.
Was ist Pessimistic Locking?
Pessimistic Locking sperrt Datensätze direkt in der Datenbank. Andere Transaktionen müssen warten. Es wird bei kritischen Schreiboperationen genutzt.
Was ist eine Native Query?
Eine Native Query ist reines SQL innerhalb von JPA. Sie wird verwendet, wenn JPQL nicht ausreicht. Sie ist weniger portabel.
Was ist JPQL?
JPQL ist eine objektorientierte Abfragesprache. Sie arbeitet mit Entities statt Tabellen. Das macht sie datenbankunabhängig.
Was ist Criteria API?
Die Criteria API erlaubt typsichere dynamische Abfragen. Sie wird häufig für komplexe Filterlogik genutzt. Der Code ist jedoch schwerer lesbar.
Was ist eine Projection in Spring Data JPA?
Projections erlauben das Laden nur bestimmter Felder. Dadurch werden Performance und Speicherverbrauch verbessert. Sie können als Interface oder Klasse definiert werden.
Was ist Batch Processing in Hibernate?
Batch Processing bündelt mehrere SQL-Statements. Das reduziert Roundtrips zur Datenbank. Es ist besonders bei Inserts und Updates sinnvoll.
Was ist hibernate.jdbc.batch_size?
Diese Einstellung steuert die Größe von SQL-Batches. Größere Batches verbessern die Performance. Sie müssen datenbankabhängig getestet werden.
Was ist der Unterschied zwischen save und saveAndFlush?
save speichert die Entität im Persistence Context. saveAndFlush schreibt sofort in die Datenbank. Das kann für Konsistenz wichtig sein.
Was ist Open Session in View?
Dieses Pattern hält die Session bis zum View-Layer offen. Es ermöglicht Lazy Loading in Views. Es kann aber versteckte Performanceprobleme verursachen.
Wann sollte man JDBC statt JPA verwenden?
Bei sehr komplexen Reports oder stark optimiertem SQL. JDBC bietet maximale Kontrolle. Der Entwicklungsaufwand ist jedoch höher.
Wie testet man JPA-Repositories?
Man nutzt meist In-Memory-Datenbanken wie H2. Tests laufen isoliert und schnell. Spring bietet dafür @DataJpaTest.
Was ist eine Transaktionsisolation?
Sie bestimmt, wie Transaktionen sich gegenseitig beeinflussen. Beispiele sind Read Committed oder Serializable. Höhere Isolation reduziert Nebenwirkungen, kostet aber Performance.
Was ist Schema Generation in JPA?
JPA kann Datenbankschemata automatisch erzeugen. Das wird meist in Entwicklung genutzt. In Produktion ist es riskant.
Was ist der Unterschied zwischen FetchType.LAZY und EAGER?
LAZY lädt Beziehungen erst bei Zugriff. EAGER lädt sie sofort. Falsche Nutzung kann Performanceprobleme verursachen.
Wann ist JPA ungeeignet?
Bei extrem komplexem SQL oder datenbankspezifischen Features. Auch bei sehr großen Datenmengen kann JDBC sinnvoller sein.
Zuletzt geändertvor einem Monat