Bienvenida e Introducción

1

Qué aprenderás sobre Hibernate y Java Spring

2

Instalar ambiente de desarrollo en Windows

3

¿Qué es una Aplicación Empresarial?

4

¿Cómo funcionan las Aplicaciones Web?

5

Servidores Web vs Servidores de Aplicación

6

Instalar ambiente de desarrollo Mac

7

Patrón de Arquitectura MVC

8

Características de los Servlet

9

Utilización del Servlet

10

Características y práctica de JSP

Comenzar con Spring Boot

11

Arquitectura de las Aplicaciones Web

12

Características de Spring Framework

13

Características de Spring Boot

14

Crear, cargar y configurar una aplicación en Spring Boot

15

Crear la estructura del proyecto

Spring Data JPA

16

Persistencia de objetos

17

Spring Data, Spring Data JPA

18

Iniciar la base de datos postgres utilizando Docker

19

Optimizar Pojos con Lombok

20

Mapear Tablas de la Base de Datos

21

Configurar la persistencia con Hibernate

Manejo de Negocio

22

Añadir JPA Repository

23

Implementar las operaciones de Consulta con JPA Repository

24

Implementar servicio de negocio para las operaciones CRUD

25

Manejar la transaccionalidad de un servicio de negocio

Spring REST

26

Instalar y configurar Swagger

27

Características de los Servicios Web y Spring Rest

28

Implementar las operaciones REST para crear y actualizar información

29

Implementar las operaciones REST para eliminar y consultar información

30

Documentación de los servicios REST con Swagger

Spring Security

31

Manejar la seguridad en una aplicación web

32

Características, instalación e integración de Spring Security

33

Personalizar la página de Login

Despliegue Aplicaciones Docker

34

Realizar la configuración de Docker Plugin

35

Crear una imagen docker de la aplicación

36

Subir la aplicación a docker hub

37

Ejecutar la aplicación dockerizada

38

Despedida del curso

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Hibernate y Java Spring 2018

Curso de Hibernate y Java Spring 2018

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Mapear Tablas de la Base de Datos

20/38
Recursos

El proceso de mapear las tablas de la base de datos a clases en nuestra capa de modelo se conoce como ORM (Object Relational Mapping), vamos a convertir las columnas de las tablas en atributos de las clases y las relaciones entre tablas pasan a ser atributos de tipo objeto o lista de objetos.

Antes de comenzar debemos configurar las dependencias para la base de datos que vamos a utilizar y el manejo/soporte del administrador de capas de persistencia (JPA) en el archivo pom.xml.

Aportes 40

Preguntas 15

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

No es necesario manejar un tema de estándares en los nombres de los campos de una clase. Ya sabiendo cuál es la clase ya se sabe el atributo a donde pertenece… es una pésima práctica manejar los nombres así, más en español. No deberían explicar esto así en un curso que se supone es profesional.

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>42.1.4</version>
		</dependency>

Igualmente se pueden buscar las dependencia y descargarlas desde : (https://mvnrepository.com/)

de donde viene el tema system-uuid y uuid2 es decir no entiendo por que poner eso es un estándar o existen mas variables

Hola, en las versiones actuales de Lombok tenemos que existen anotaciones que nos ayudan con la creación de constructores como lo son:

@AllArgsConstructor
@NoArgsConstructor

Para más información link : https://projectlombok.org/features/constructor

Mi configuración para mysql

//pom.xml
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>
//application.yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/prueba?serverTimezone=UTC
    username:mysql_user
    password: mysql_password
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: create-drop
    generate-ddl: true
    show-sql: true

un aporte a esta clase, se pueden importar las dependencias de los recursos que se estan utilizando con Control + shift + O

El Lombok esta Genial… No lo habia utilizado pero Me gusta su Funcionalidad 😃

Excelente explicacion del uso de las anotaciones para casos de unos a muchos y de muchos a uno quedo clarisimo

Buenas tardes. Se me ha presentado un problema dado que en mi código no se reconoce el org.hibernate.annotations.GenericGenerator pero si reconoce org.hibernate.annotations. He revisado el Maven Dependencies en el package explorer y reconozco estas 3 librerias.
hibernate-validator-6.0.14.Final.jar
hibernate-core-5.3.7.Final.jar
hibernate-commons-annotations-5.0.4.Final.jar
No entiendo si me falta algo en la configuración o talves otra libreria. Gracias.

Listo, solo para copiar y pegar:
`
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.1.4</version>
</dependency>
`

buena explicación!!!

Ancioso por comenzar 😄

Hola, el uuid y el uuid2 son de postgres o se deben especificar tambien para otras bd con el mismo valor? gracias

¿Alguien sabe por qué no me reconoce @Entity?
ya importe la librería import javax.persistence.Entity; y no la reconoce

Yo estoy confundido con tanto que se repite tema,tema,tema no entiendo por memomemtos a que hace referencia

Estimados una consulta, el @Data también le esta creando setter y getter en cliente al atributo de tipo Set y en Reserva al atributo Cliente?

me parece genial el uso de estas herramientas, permiten una estructura mas corta

Podría crear una clase abstracta (“tabla”) que contenga las anotaciones

@Data
@Entity

y también el id autogenerado

@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
private String id;

para no tener que declararlo en todas las clases?

Lo intento y no reconoce por herencia la anotación @Data

Como se realizaria el objeto y su notación cuando quieres unir campos de 2 tablas de una bd relacional, es decir…

Tablas: Usuario (id, userName, password, idEmpleado)
, Empleado (id, nombre, apellidoPaterno, apellidoMaterno)

y quiero crear un objeto donde tenga el userName (usuario) y el nombre (empleado), en sql haria algo como:

SELECT usu.userName, emp.nombre
FROM usuario as usu
inner join empleado as emp on (usu.idEmpleado = emp.id)

No quiero crear una tabla intermedia.
No quiero guardar el nombre del empleado en la tabla de usuario.
Requiero de mas campos, este es solo un ejemplo.

Agradeceria mucho su ayuda, orientación.

La verdad es que no me gusta mucho que en java se definan tan explicitos los atributos y métodos. Me gusta siempre nombres simples, cortos si es posible. Que mantenga legibilidad y sean intuitivos. Además de mantener el inglés es clave.

Me surge una duda. ¿ como hago para mapear una relación recursiva de una entidad ? encontre varias formas y use esta :

        @ManyToOne
	@JoinColumn(name="llaveforanea", referencedColumnName = "llaveprimaria" )
	private Clase cPadre;
	
	@OneToMany(mappedBy = "cPadre")
	private Set<Clase> cHijos;

pero en el momento de utilizar swagger y probar el api REST me genera el siguiente error Could not write JSON: Infinite recursion. Por lo que no se si estoy realizando bien el mapeo o a que se debe este error. Gracias por la respuesta

Configuración Pom, para integrar Dependencias:

Agregamos, con la pestaña Dependencies del Pom.xml

Hola, quisiera mas informacion sobre los tipos de relaciones con ejemplos practicos y como se hacen las anotaciones en los casos de OneToOne por ejemplo, donde puedo verlo? Gracias

/1 a muchos/
@OneToMany(mappedBy = “clienteMap”) //es donde vamos a mapear
private Set<Reservas> reservas;

/muchos a 1/
@ManyToOne
@JoinColumn(name = “idCli”) //qque columna está tomando como FK
private Cliente clienteMap;

Tengo una relación entre cursos y estudiantes
Cursos <–> EstudiantesXCursos <–>Estudiantes
al momento de cargar está cayendo en redundandcia, como evito eso?

Hibernate también permite el mapeo a clases directamente desde la base de datos, lo que me parece es más fácil y desde mi punto de vista mas lógico.

cual puede ser la razon por la que ya no habra el spring ? ya otra pregunta porque aunque ya instale el jombok y lo reconoce me marca error en @Entity
@Table
@Id
@GeneratedValue
@GenericGenerator
aunque actualice en maven… eta subrayado en rojo y marca error “cannot reslved to type”

Listo… continuemos 😃

por qué se utiliza el set para la lista de objetos y no otro tipo de objeto?

disculpen, cuando agrego el decorador @Entity me explota la app y me arroja el siguiente error
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘entityManagerFactory’

package com.taskgenerator.demo.model;

import lombok.Data;
import org.springframework.data.annotation.Id;

import javax.persistence.*;
import javax.persistence.Entity;
import java.util.ArrayList;

/**
 *  clase que representa la tabla usuario
 * @author emilio
 *
 * */
@Data
@Entity

@Table(name = "user")
public class User {
    @Id
    @GeneratedValue
    @Column(name="pk-id")
    private String idUser;
    @Column(name="email")
    private String email;
    @Column(name="address")
    private String address;
    @Column(name="phone_number")
    private String phoneNumber;

    @OneToMany(mappedBy = "user")
    @Column(name="tasks")
    private ArrayList<Task> tasks;
}

y otra consulta que dejo colgada , si yo quisiera que la clase user herede de una superclase Account para manejar el id
como se comportaria el @data?

asta el momento no le visto la utilidad a la libreria lombok pues si tengo una clase con muchos atributos pues el IDE permite autogenerar los getter y setter.

Ahora entiendo la necesidad de la anotación @JoinColum, normalmente no lo colocaba en las aplicaciones y es porque la estrategia es distinta.

que sucede si agrego una columna a la bd pero no al hibernate?

He visto que alguno proyectos implementan de Serializable, en los modelos, ¿Cuál es la finalidad de implementar de Seriaizable?

pero el profesor no explica para que sirve: GenericGenerator. y cual es la diferencia si con generatedValue tmb podemos hacer uso de stregegias:
@GenerateValue (strategy = GenerationType.IDENTITY)
?? no me esta gustando este curso.

Buenas noches compañeros, tal vez alguien me podría ayudar con documentación para mapear una base de datos no relacional (una para MongoDB) con Spring Boot, por favor y gracias de antemano.

¿Con mysql la anotación es igual?
@GeneratedValue(generator=“system-uuid”)
@GenericGenerator(name=“system-uuid”,strategy=“uuid2”)

¿o es diferente?