Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] Mapeando relacionamientos #2

tengo una duda, vi que al compilar el programa se creo una FK dentro de la tabla productos de la siguiente manera:

Hibernate: alter table productos add constraint FKe5xy98bohp955stq7amlynkpt foreign key (categoria_id) references Categorias**

Pero no entiendo en que parte del programa se anadio dicha llave, es en el @ManytoOne?

package com.latam.alura.tienda.modelo;

import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDate;

@Entity
@Table (name ="productos")
public class Producto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nombre;
    private String descripcion;
    private BigDecimal precio;
    private LocalDate fechaDeRegistro = LocalDate.now();

    @ManyToOne
    private Categoria categoria;

    public Producto(String nombre, String descripcion, BigDecimal precio, Categoria categoria) {
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.precio = precio;
        this.categoria = categoria;
    }

    public Producto() {

    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public BigDecimal getPrecio() {
        return precio;
    }

    public void setPrecio(BigDecimal precio) {
        this.precio = precio;
    }
}

2 respuestas
solución!

¡Hola Cesar!

La llave que se agregó en la tabla productos es una clave foránea que hace referencia a la tabla Categorias. Esta llave se agregó automáticamente cuando se creó la relación @ManyToOne en la clase Producto.

La anotación @ManyToOne indica que muchos productos pueden pertenecer a una sola categoría. Al agregar esta anotación, Hibernate crea la columna "categoria_id" en la tabla productos y agrega la restricción de clave foránea que hace referencia a la tabla Categorias.

Espero que esto responda tu pregunta. ¡Buenos estudios!

Hola Cesar, para que lo entiendas un poco más sencillo es lo mismo que hicimos en el curso de JDBC cuando alteramos la tabla producto, para colocar el campo categoria_id, añadiendo una foreign key referenciando dicha categoría, ya creada. Ejemplo:

ALTER TABLE producto ADD FOREIGN KEY (categoria_id) REFERENCES categoria(id)

Solo que ahora, JPA con Hibernate ya lo hace automáticamente sin necesidad de colocarla, y crea los campos convenientes, con la ayuda de dicha anotación @ManyToOne.