Hibernate: mapeo de muchos a uno

Hibernate es un marco ORM (Mapeo relacional de objetos) de código abierto que proporciona operaciones CRUD en forma de objetos. Es un marco no invasivo. Se puede utilizar para desarrollar DataAcessLayer para todos los proyectos de Java. No depende del servidor. Significa que el código de hibernación se ejecuta sin un servidor y también con un servidor. Es una capa superior de JDBC, JTA y JNDI Technologies. Sigue el concepto ORM

  • ORM es un concepto teórico 
  • Hace que la programación o el desarrollo esté en el proceso de orientación a objetos.

Hibernate admite la programación orientada a objetos mediante el uso de conceptos de mapeo. El programador debe realizar esta asignación, luego hibernate insertará los objetos en la tabla de la base de datos como una fila y la fila se puede volver a convertir en un objeto sin ninguna consulta SQL escrita por el programador. 

Asociaciones en Hibernate

La clase principal debe tener una referencia de clase secundaria con o sin tipo de colección. Esta asociación también puede seguir a la multiplicidad como

  • Cara a cara
  • Uno a muchos
  • Muchos a uno
  • Muchos a muchos

Aquí estos se dividen en dos tipos que son 

Tipo de no colección:

  • Cara a cara
  • Muchos a uno

Tipo de colección:

  • Uno a muchos
  • Muchos a muchos

Aquí vamos a discutir el mapeo Many-To-One desarrollado usando SpringBoot Data JPA en STS (Spring Tool Suite)

Bota de primavera

SpringBoot es una extensión del marco basado en resortes que elimina la configuración repetitiva requerida para la configuración de la aplicación basada en resortes. Básicamente, se basa en Spring Framework para reducir básicamente una gran cantidad de configuración necesaria para configurar una aplicación basada en Spring. El objetivo principal de SpringBoot es reducir el código común escrito por los programadores, lo que se denomina Autoconfiguración. Data JPA proporciona @NoRepositoryBean, que se configura automáticamente y se implementa la lógica propia para las operaciones básicas. Simplemente, JPA (API de persistencia de Java) es una interfaz. Hibernate proporciona la implementación de los métodos de interfaz.

Mapeo de muchos a uno

En este artículo, discutiremos el mapeo de muchos a uno con la ayuda de un ejemplo. Muchos empleados trabajan en la misma empresa, por lo que todos los empleados que trabajan tienen la misma dirección de la empresa. Muchos empleados tienen una dirección

Java

// Syntax
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "Foreign key column")

Pasos para crear un proyecto Spring Boot usando STS

Paso 1: Abra el STS (Spring Tool Suite)

Paso 2: haga clic en el menú Archivo -> seleccione Nuevo -> seleccione Spring Starter Project, luego se abre una nueva ventana que proporciona los detalles requeridos como Nombre, Grupo, Artefacto, versión de Java, etc.

Creating Spring Boot Project Using STS

 

Creating Spring Boot Project Using STS

 

Paso 3: ingrese el nombre del proyecto, ingrese el artefacto, el grupo, luego haga clic en -> Siguiente -> luego se abrirá otra ventana nueva en la que proporcionará la versión de SpringBoot y las dependencias requeridas para este proyecto (Spring Data Jpa y MySql Driver) Las dependencias son Se requiere agregar estas dependencias y luego hacer clic en–>Finalizar. 

Add Dependency

 

Luego, el proyecto se crea en el nombre del editor como GFG-MAPPING-PROJECT. La estructura del proyecto se ve a continuación.

Project Structure

 

Paso 4:

Vaya a src/main/resources open application.properties para agregar las propiedades necesarias como se muestra a continuación

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/schemaname
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

Paso 5:

Vaya a src/main/java, cree un paquete para las clases modelo (por ejemplo, com.gfg.model) y cree un paquete para el repositorio (por ejemplo, com.gfg.repository). A continuación, cree dos clases de modelos en el paquete de modelos.

  • Empleado.java
  • Dirección.java

Empleado.java

Java

package com.gfg.model;
 
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
 
@Entity
public class Employee {
 
    @Id private int empId;
    private String empName;
   
    // Many employees has one company address
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "address_id")
    private Address address;
 
    public Employee(int empId, String empName,
                    Address address)
    {
        super();
        this.empId = empId;
        this.empName = empName;
        this.address = address;
    }
 
    public Employee() { super(); }
 
    @Override public String toString()
    {
        return "Employee []";
    }
 
    public int getEmpId() { return empId; }
 
    public void setEmpId(int empId) { this.empId = empId; }
 
    public String getEmpName() { return empName; }
 
    public void setEmpName(String empName)
    {
        this.empName = empName;
    }
 
    public Address getAddress() { return address; }
 
    public void setAddress(Address address)
    {
        this.address = address;
    }
}

Dirección.java

Java

package com.gfg.model;
 
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
 
@Entity
public class Address {
 
    @Id private int addressId;
    private String location;
 
    @OneToMany(cascade = CascadeType.ALL,
               mappedBy = "address")
    private List<Employee> employee
        = new ArrayList<>();
 
    public Address(int addressId, String location)
    {
        super();
        this.addressId = addressId;
        this.location = location;
    }
 
    public Address() { super(); }
 
    public int getAddressId() { return addressId; }
 
    public void setAddressId(int addressId)
    {
        this.addressId = addressId;
    }
 
    public String getLocation() { return location; }
 
    public void setLocation(String location)
    {
        this.location = location;
    }
 
    public List<Employee> getEmployee() { return employee; }
 
    public void setEmployee(List<Employee> employee)
    {
        this.employee = employee;
    }
}

Paso 6:

Ir al paquete del repositorio agregando el repositorio JPA de ambas clases de modelos 

EmpleadoRepo.java

Java

package com.gfg.repository;
 
import org.springframework.data.jpa.repository.JpaRepository;
import com.gfg.model.Employee;
 
public interface EmployeeRepo extends JpaRepository<Employee,Integer>{
 
}

 DirecciónRepo.java

Java

package com.gfg.repository;
 
import org.springframework.data.jpa.repository.JpaRepository;
import com.gfg.model.Address;
 
public interface AddressRepo extends JpaRepository<Address,Integer>{
 
}

Paso 7: Vaya a la clase de inicio Autowire dos interfaces de repositorio y cree objetos para clases modelo 

GfgMappingProjectApplication.java

Java

package com.gfg;
 
import com.gfg.model.Address;
import com.gfg.model.Employee;
import com.gfg.repository.AddressRepo;
import com.gfg.repository.EmployeeRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class GfgMappingProjectApplication
    implements CommandLineRunner {
 
    @Autowired AddressRepo addessRepo;
    @Autowired EmployeeRepo empRepo;
 
    public static void main(String[] args)
    {
        SpringApplication.run(
            GfgMappingProjectApplication.class, args);
    }
    @Override
    public void run(String... args) throws Exception
    {
 
        Address addr = new Address(1, "Bangloor");
        addessRepo.save(addr);
 
        Employee emp1 = new Employee(1, "Alpha", addr);
        Employee emp2 = new Employee(2, "Beeta", addr);
 
        empRepo.save(emp1);
        empRepo.save(emp2);
    }
}

Paso 8: Ejecute la aplicación principal

Haga clic derecho en GfgMappingProjectApplication seleccione Ejecutar como aplicación de arranque de primavera

Output

 

Luego vaya a Base de datos y luego verifique las tablas. 

Tabla de direcciones:

select * from address;
Output

 

Tabla de empleados:

select * from employee;
Output

 

Publicación traducida automáticamente

Artículo escrito por veeracharyu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *