| opslaan() | Voegt onmiddellijk in; retourneert gegenereerde ID | Serialiseerbaar | Optioneel |
| aanhouden() | Registreert entiteit; geen identificatie tot flush | ongeldig | Verplicht |
| saveOrUpdate() | Invoegen indien nieuw, bijwerken indien bestaand | ongeldig | Verplicht |
Geef de voorkeur aan persist() in pure PPV-contexten; gebruik saveOrUpdate() bij het werken met Hibernate-versies.
25) Hoe gaat Hibernate om met samengestelde primaire sleutels?
Samengestelde sleutels worden weergegeven met @Embeddable en @EmbeddedId annotaties.
@Embeddable
public class EmployeeId implements Serializable {
private int empId;
private String departmentId;
}
@Entity
public class Employee {
@EmbeddedId
private EmployeeId id;
}
Handig voor oudere schema's of natuurlijke toetscombinaties.
26) Wat is het N+1-selectieprobleem in Hibernate en hoe kan dit worden vermeden?
Het N+1-probleem doet zich voor wanneer een query een bovenliggende entiteit ophaalt en vervolgens voor elk kind N extra query's activeert.
- Oplossing 1:
JOIN FETCH in HQL.
- Oplossing 2:batchgewijs ophalen (stel
hibernate.default_batch_fetch_size in ).
- Oplossing 3:cache op het tweede niveau voor herhaalde zoekopdrachten.
Voorbeeld:SELECT d FROM Department d JOIN FETCH d.employees;
27) Wat is de rol van de hibernate.cfg.xml bestand?
Dit XML-bestand centraliseert de configuratie:JDBC-instellingen, dialect, mappings, caching en transactieopties.
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping class="com.example.Employee"/>
</session-factory>
</hibernate-configuration>
Moderne projecten vervangen of vullen dit vaak aan met annotaties of programmatische configuratie.
28) Hoe kunt u paginering in Hibernate implementeren?
Paginering beperkt de resultatensets, waardoor het geheugengebruik wordt verminderd.
Query query = session.createQuery("from Employee");
query.setFirstResult(10); // skip first 10
query.setMaxResults(20); // fetch next 20
List<Employee> list = query.list();
Effectief voor REST API's en grote gegevenstabellen.
29) Hoe beheert Hibernate gelijktijdigheid en versiebeheer?
Hibernate maakt gebruik van optimistische vergrendeling met de @Version annotatie. Elke update verhoogt de versiekolom, en conflicterende updates verhogen OptimisticLockException .
@Version
@Column(name="version")
private int version;
Voor scenario's met veel conflicten, pessimistische vergrendeling kan worden toegepast met LockMode.PESSIMISTIC_WRITE .
30) Wat zijn enkele veelvoorkomende scenario's voor een Hibernate-interview en hoe zou u hiermee omgaan?
- LazyInitializationException na afsluiting van de sessie – gebruik Open Session in View of gretig ophalen.
- Dubbele invoegingen voor losgemaakte entiteiten – geef de voorkeur aan
merge() via update() .
- Overmatig zoeken beïnvloedt de prestaties – schakel caching, batch ophalen in of herschrijf HQL-joins.
- Gelijktijdige updateconflicten – implementeer optimistische vergrendeling met
@Version of schakel over naar pessimistische sloten.
Deze scenario's illustreren de praktische probleemoplossing, een sleutelvaardigheid voor senior ontwikkelaars en architecten.
🔍 Belangrijkste interviewvragen in de slaapstand met scenario's uit de praktijk en strategische reacties
Hieronder staan tien realistische vragen over kennis, gedrag en situationele aspecten. Elk bevat de verwachting van de interviewer en een beknopt voorbeeldantwoord.
1) Wat is Hibernate en waarom wordt het gebruikt in bedrijfstoepassingen?
Verwachtingen: Duidelijke uitleg van het doel, de voordelen en veelvoorkomende gebruiksscenario's.
Voorbeeldantwoord: Hibernate is een ORM die SQL abstraheert, waardoor ontwikkelaars met Java-objecten kunnen werken terwijl ze persistentie, caching en transactiebeheer afhandelen. Het reduceert de standaardsituatie, verbetert de draagbaarheid en verbetert de prestaties in grootschalige systemen.
2) Kunt u het verschil uitleggen tussen get() en load() in slaapstand?
Verwachtingen: Inzicht in de ophaalmechanismen en proxygedrag.
Voorbeeldantwoord: get() voert onmiddellijk een query uit op de database en retourneert null als er geen record bestaat. load() retourneert een proxy, waarbij de zoekopdracht wordt uitgesteld totdat de entiteit wordt benaderd en ObjectNotFoundException wordt gegenereerd indien ontbreekt.
3) Beschrijf een uitdagende situatie die u tegenkwam met Hibernate en hoe u deze heeft opgelost.
Verwachtingen: Demonstreert vaardigheden op het gebied van probleemoplossing, foutopsporing en optimalisatie.
Voorbeeldantwoord: Ik heb een N+1 select-knelpunt opgelost door collectie-ophaalacties te vervangen door JOIN FETCH en het configureren van batch ophalen. Hierdoor is het aantal zoekopdrachten teruggebracht van 101 naar 3 en is de responstijd met 70% verbeterd.
4) Hoe ga je om met uitzonderingen op het gebied van lui laden in Hibernate?
Verwachtingen: Bewustzijn van sessielevenscyclus- en mitigatiestrategieën.
Voorbeeldantwoord: Ik onderhoud een open sessie tijdens het renderen van weergaven of gebruik Open Session in View. Voor kritische associaties schakel ik over op gretig ophalen of gebruik ik DTO-projecties om luie initialisatiefouten te voorkomen.
5) Welke cachingstrategieën ondersteunt Hibernate?
Verwachtingen: Kennis van caches op het eerste, tweede niveau en zoekopdrachten.
Voorbeeldantwoord: Hibernate biedt een verplichte cache op het eerste niveau per sessie en een optionele cache op het tweede niveau (Ehcache, Infinispan). De zoekopdrachtcache werkt samen met de cache op het tweede niveau om resultatensets voor herhaalde zoekopdrachten op te slaan.
6) Vertel eens over een keer dat u met een team heeft samengewerkt om een probleem met de persistentielaag op te lossen.
Verwachtingen: Demonstreert communicatie en teamwerk.
Voorbeeldantwoord: Ik heb met backend- en DBA-teams gewerkt om langzame query's te identificeren via Hibernate-logboeken, de HQL opnieuw te bepalen en indexen toe te voegen aan vaak opgevraagde kolommen, waardoor de latentie met 55% werd verminderd.
7) Hoe zou u Hibernate-toewijzingen ontwerpen voor een complex domeinmodel met meerdere relaties?
Verwachtingen: Mogelijkheid om kardinaliteit, eigendom, cascadering en ophalen in kaart te brengen.
Voorbeeldantwoord: Ik analyseer het domein om één-op-veel-, veel-op-veel- en één-op-één-relaties te bepalen, en annoteer met @OneToMany of @ManyToMany en stel de trapsgewijze en ophaalmodi in op basis van de zakelijke vereisten.
8) Welke stappen zou u ondernemen als Hibernate inefficiënte SQL zou genereren tijdens de productie?
Verwachtingen: Mindset voor het oplossen van prestatieproblemen.
Voorbeeldantwoord: Schakel SQL-logboekregistratie in, bekijk gegenereerde query's, pas ophaaltypen aan, refactor HQL of introduceer queryhints. In kritieke gevallen gebruik ik native SQL voor specifieke bewerkingen.
9) Hoe waarborgt u gegevensintegriteit en consistentie in transactionele Hibernate-applicaties?
Verwachtingen: Kennis van transactiebeheer en gelijktijdigheidscontrole.
Voorbeeldantwoord: Ik gebruik declaratieve @Transactional grenzen, optimistische vergrendeling met @Version , en de juiste propagatie-instellingen om de consistentie tussen gedistribueerde transacties te behouden.
10) Beschrijf een project waarin Hibernate een sleutelrol speelde en hoe u het succes ervan verzekerde.
Verwachtingen: Impact en eigenaarschap in de echte wereld.
Voorbeeldantwoord: In een groot orderverwerkingssysteem heb ik efficiënte entiteitstoewijzingen ontworpen, caching geïmplementeerd en herbruikbare DAO-lagen gemaakt, wat heeft geleid tot een vermindering van de databasebelasting met 40% en een soepelere implementatiecyclus.