Hibernate Get vs. Load

In Hibernate bestaat het concept van enkelvoudige rij ophalen. Om één rij in de desbetreffende database tabel op te halen, kiezen we tussen get() of load().

get()

get() raakt altijd de database.

Als het seriële id gevonden wordt, krijgen we de bijbehorende gegevens.

Voorbeeld

SwingBowlers swingBowlers = (SwingBowlers) openSession.get(SwingBowlers.class,1);

Seriële id is 1 (jerSeyNo) –> Primaire Sleutel

Als de serializable id niet gevonden wordt, dan krijgen we als resultaat null.load()

load() creëert altijd een proxy-object.  Als de serializable id gevonden wordt, dan krijgen we de bijbehorende details.        

Voorbeeld

SwingBowlers swingBowlers = (SwingBowlers) openSession.get(SwingBowlers.class,1);

System.out.println(swingBowlers);

Serializable id is 1 (jerSeyNo) –> Primaire sleutel

Als de serializable id niet gevonden wordt, krijgen we als resultaat org.hibernate.ObjectNotFoundException.  

Controleer of er nog steeds een query wordt gegenereerd, ook al gebruiken we de load-methode omdat we probeert om objectdetails weer te geven. [System.out.println(swingBowlers);]. Maar het komt enkel vanuit het Proxy Object[Dummy Object].

Laten we het praktisch bekijken.

HibernateTutorialRun.java

Java

 

package com.blogspot.javacodebypj;

import com.blogspot.javacodebypj.dao.SwingBowlersDaoImpl;

public class HibernateTutorialRun {

    public static void main(String[] args) {

        SwingBowlersDaoImpl sbdi = new SwingBowlersDaoImpl();

        sbdi.getSwingBowlers();

        }

}

Uitleg:  HibernateTutorialRun is een klasse om de HibernateTutorial applicatie uit te voeren, en we gebruiken het zonder een server. Hibernate kan lopen met de server en zonder de server. We hebben de main-methode gemaakt, en daarin hebben we gewoon een object aangemaakt voor de desbetreffende klasse SwingBowlersDaoImpl. Vervolgens gebruiken we die objectverwijzing om de desbetreffende methode aan te roepen.

SwingBowlersDao.java

Java

 

package com.blogspot.javacodebypj.dao;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import com.blogspot.javacodebypj.domain.SwingBowlers;

import com.blogspot.javacodebypj.util.HibernateUtil;



public class SwingBowlersDaoImpl implements SwingBowlersDao {

    @Override

    public void getSwingBowlers() {

        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

        Session openSession = sessionFactory.openSession();

       // gebruik van de load-methode

        SwingBowlers swingBowlers = (SwingBowlers) openSession.load(SwingBowlers.class, 1);

        System.out.println(swingBowlers);

    }

}

Uitleg:We hebben zojuist de SwingBowlersDaoImpl klasse gemaakt en geïmplementeerd met de SwingBowlersDao en we gaan de bijbehorende methode overschrijven. We proberen de HibernateUtil klasse-methode aan te roepen, namelijk de getSessionFactory methode, we krijgen dan een SessionFactory object, en met de SessionFactory objectreferentie roepen we de openSession methode aan. Vervolgens krijgen we een Session object.

Zodra we Session object met deze sessie hebben, kunnen we ofwel de load methode of de get methode gebruiken, en we casten gewoon naar de respectievelijke klasse vanwege de load methode of de get methode die Object retourneert. Ik hoop dat je het concept van upcasting en downcasting in Java kent.

SwingBowlers.java

Java

 

package com.blogspot.javacodebypj.domain;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

@Entity

public class SwingBowlers {

    @Id

    @Column(length = 3)

    private int jerseyNo;

    @Column(length = 15)

    private String bowlerName;

    @Column(length = 10)

    private String country;

    public int getJerseyNo() {

        return jerseyNo;

    }

    public void setJerseyNo(int jerseyNo) {

        this.jerseyNo = jerseyNo;

    }

    public String getBowlerName() {

        return bowlerName;

    }

    public void setBowlerName(String bowlerName) {

        this.bowlerName = bowlerName;

    }

    public String getCountry() {

        return country;

    }

    public void setCountry(String country) {

        this.country = country;

    }

    @Override

    public String toString() {

        return "SwingBowlers [jerseyNo=" + jerseyNo + ", bowlerName=" + bowlerName + ", country=" + country + "]";

    }

}

Uitleg:Aangezien we velden toewijzen aan databankkolommen, is er geen noodzaak om de kolomnaamwaarde in de annotatieniveau te schrijven als het dezelfde veldnaam is als de kolom in de databanktabel. Evenzo is de tabelnaam ook dezelfde als de klasse naamSwingBowlersdaarom annoteren we niet met @Table. Om het een domeinklasse te maken, gebruiken we de @Entity-annotatie bovenaan de desbetreffende klasse.

HibernateUtil.java

Java

 

package com.blogspot.javacodebypj.util;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static SessionFactory sessionFactory;

    private HibernateUtil() {

    }

    public static SessionFactory getSessionFactory() {

        if (sessionFactory == null) {

            Configuration conf = new Configuration().configure();

            sessionFactory = conf.buildSessionFactory();

        }

        return sessionFactory;

    }

}

Uitleg:We hebben netSessionFactory gemaakt als een singletonklasse.

hibernate.cfg.xml

Java

 

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">



<hibernate-configuration>

    <session-factory>

        <property name="connection.driver_class">com.mysql.jdbc.Driver

        </property>

        <property name="connection.url">jdbc:mysql://localhost:3306/cricketer</property>

        <property name="connection.username">root</property>

        <property name="connection.password">myRoot4*</property>



        <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>

        <property name="show_sql">true</property>

        <property name="hbm2ddl.auto">update</property>



        <mapping class="com.blogspot.javacodebypj.domain.SwingBowlers" />



    </session-factory>

</hibernate-configuration>

Uitleg:In dit document hebben we drie secties: 

  1. Databasegerelateerde eigenschappen
  2. Hibernate-gerelateerde eigenschappen
  3. Mapping klasse

Zoals u weet, gebruiken we geen Hibernate-mappings-xml-bestand, daarom hebben we alleen de mapping klasse genoemd.

dialect:Het wordt gebruikt voor het genereren van query’s met betrekking tot de database. In deze applicatie gebruiken we de MySQL-database.

show_sql:Nadat query’s zijn gegenereerd, moeten we deze query’s zien, dus moeten we ze aangeven als true.

pom.xml

Java

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.blogspot.javacodebypj</groupId>

    <artifactId>HibernateTutorial</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <name>HibernateTutorial</name>

    <description>HibernateTutorial by Ponnam Jay</description>

    <properties>

        <maven.compiler.target>1.8</maven.compiler.target>

        <maven.compiler.source>1.8</maven.compiler.source>

    </properties>

    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->

        <dependency>

            <groupId>org.hibernate</groupId>

            <artifactId>hibernate-core</artifactId>

            <version>5.6.14.Final</version>



        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>8.0.28</version>

        </dependency>



    </dependencies>

</project>

Uitleg: We hebben deze Maven-projectstructuur net gegenereerd via de Eclipse IDE als een eenvoudig Maven-project. We hebben afhankelijkheden toegevoegd zoals hibernate-coremysql-connector-java en Java 1.8 gebruikt om te observeren in het pom.xml op het gebied van eigenschappen doel en bron.

Database Details


Conclusie 

Als je een enkele rij (enkele record) wilt ophalen (retrieveren), kun je ofwel de get methode [of]  load methode gebruiken.

Source:
https://dzone.com/articles/hibernate-get-vs-load