JPA Consultas avanzadas...: Aula 1

This commit is contained in:
devfzn 2023-09-06 15:20:51 -03:00
parent b968bcdb07
commit d41f0f89bd
Signed by: devfzn
GPG Key ID: E070ECF4A754FDB1
20 changed files with 890 additions and 5 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@ bin/
*.uxf *.uxf
*.umlcd *.umlcd
target/ target/
*.trace.db

View File

@ -9,3 +9,6 @@ Java y [bases de datos](./base_de_datos.md)
Java y [JDBC](./jdbc.md) Java y [JDBC](./jdbc.md)
- [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate) - [Curso](https://app.aluracursos.com/course/persistencia-jpa-hibernate)
Persistencia con [JPA - Hibernate](./jpa_persistencia_hibernate.md) Persistencia con [JPA - Hibernate](./jpa_persistencia_hibernate.md)
- [Curso](https://app.aluracursos.com/course/java-jpa-consultas-avanzadas-rendimiento-modelos-complejos)
[JPA](./jpa_2.avanzado.md)
consultas avanzadas, rendimiento y modelos complejos

Binary file not shown.

View File

@ -0,0 +1,45 @@
<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.latam.alura.tienda</groupId>
<artifactId>tienda</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<optimize>true</optimize>
<encoding>UTF-8</encoding>
<release>${java.version}</release>
<fork>true</fork>
<executable>/usr/bin/java</executable>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.15.Final</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.222</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<java.version>17</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -0,0 +1,38 @@
package com.latam.alura.tienda.dao;
import java.util.List;
import javax.persistence.EntityManager;
import com.latam.alura.tienda.modelo.Categoria;
public class CategoriaDao {
private EntityManager em;
public CategoriaDao(EntityManager em) {
this.em = em;
}
public void guardar(Categoria categoria) {
this.em.persist(categoria);
}
public void actualizar(Categoria categoria) {
this.em.merge(categoria);
}
public void remover(Categoria categoria) {
categoria = this.em.merge(categoria);
this.em.remove(categoria);
}
public Categoria consultaPorId(Long id) {
return em.find(Categoria.class, id);
}
public List<Categoria> consultarTodos() {
String jpql = "SELECT P FROM Categoria AS P";
return em.createQuery(jpql, Categoria.class).getResultList();
}
}

View File

@ -0,0 +1,54 @@
package com.latam.alura.tienda.dao;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import com.latam.alura.tienda.modelo.Cliente;
public class ClienteDao {
private EntityManager em;
public ClienteDao(EntityManager em) {
this.em = em;
}
public void guardar(Cliente cliente) {
this.em.persist(cliente);
}
public void actualizar(Cliente cliente) {
this.em.merge(cliente);
}
public void remover(Cliente cliente) {
cliente = this.em.merge(cliente);
this.em.remove(cliente);
}
public Cliente consultaPorId(Long id) {
return em.find(Cliente.class, id);
}
public List<Cliente> consultarTodos() {
String jpql = "SELECT P FROM Cliente AS P";
return em.createQuery(jpql, Cliente.class).getResultList();
}
public List<Cliente> consultaPorNombre(String nombre) {
String jpql = "SELECT P FROM Cliente AS P WHERE P.nombre=:nombre";
return em.createQuery(jpql, Cliente.class).setParameter("nombre", nombre).getResultList();
}
public List<Cliente> consultaPorNombreDeCategoria(String nombre) {
String jpql = "SELECT P FROM Cliente AS P WHERE P.categoria.nombre=:nombre";
return em.createQuery(jpql, Cliente.class).setParameter("nombre", nombre).getResultList();
}
public BigDecimal consultaPrecioPorNombreDeCliente(String nombre) {
String jpql = "SELECT P.precio FROM Cliente AS P WHERE P.nombre=:nombre";
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
}
}

View File

@ -0,0 +1,54 @@
package com.latam.alura.tienda.dao;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import com.latam.alura.tienda.modelo.Pedido;
public class PedidoDao {
private EntityManager em;
public PedidoDao(EntityManager em) {
this.em = em;
}
public void guardar(Pedido pedido) {
this.em.persist(pedido);
}
public void actualizar(Pedido pedido) {
this.em.merge(pedido);
}
public void remover(Pedido pedido) {
pedido = this.em.merge(pedido);
this.em.remove(pedido);
}
public Pedido consultaPorId(Long id) {
return em.find(Pedido.class, id);
}
public List<Pedido> consultarTodos() {
String jpql = "SELECT P FROM Pedido AS P";
return em.createQuery(jpql, Pedido.class).getResultList();
}
public List<Pedido> consultaPorNombre(String nombre) {
String jpql = "SELECT P FROM Pedido AS P WHERE P.nombre=:nombre";
return em.createQuery(jpql, Pedido.class).setParameter("nombre", nombre).getResultList();
}
public List<Pedido> consultaPorNombreDeCategoria(String nombre) {
String jpql = "SELECT P FROM Pedido AS P WHERE P.categoria.nombre=:nombre";
return em.createQuery(jpql, Pedido.class).setParameter("nombre", nombre).getResultList();
}
public BigDecimal consultaPrecioPorNombreDePedido(String nombre) {
String jpql = "SELECT P.precio FROM Pedido AS P WHERE P.nombre=:nombre";
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
}
}

View File

@ -0,0 +1,54 @@
package com.latam.alura.tienda.dao;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
import com.latam.alura.tienda.modelo.Producto;
public class ProductoDao {
private EntityManager em;
public ProductoDao(EntityManager em) {
this.em = em;
}
public void guardar(Producto producto) {
this.em.persist(producto);
}
public void actualizar(Producto producto) {
this.em.merge(producto);
}
public void remover(Producto producto) {
producto = this.em.merge(producto);
this.em.remove(producto);
}
public Producto consultaPorId(Long id) {
return em.find(Producto.class, id);
}
public List<Producto> consultarTodos() {
String jpql = "SELECT P FROM Producto AS P";
return em.createQuery(jpql, Producto.class).getResultList();
}
public List<Producto> consultaPorNombre(String nombre) {
String jpql = "SELECT P FROM Producto AS P WHERE P.nombre=:nombre";
return em.createQuery(jpql, Producto.class).setParameter("nombre", nombre).getResultList();
}
public List<Producto> consultaPorNombreDeCategoria(String nombre) {
String jpql = "SELECT P FROM Producto AS P WHERE P.categoria.nombre=:nombre";
return em.createQuery(jpql, Producto.class).setParameter("nombre", nombre).getResultList();
}
public BigDecimal consultaPrecioPorNombreDeProducto(String nombre) {
String jpql = "SELECT P.precio FROM Producto AS P WHERE P.nombre=:nombre";
return em.createQuery(jpql, BigDecimal.class).setParameter("nombre", nombre).getSingleResult();
}
}

View File

@ -0,0 +1,46 @@
package com.latam.alura.tienda.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
//public enum Categoria {
// SOFTWARES,
// LIBROS,
// CELULARES
//}
@Entity
@Table(name="categorias")
public class Categoria {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
public Categoria() {}
public Categoria(String nombre) {
this.nombre = nombre;
}
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;
}
}

View File

@ -0,0 +1,51 @@
package com.latam.alura.tienda.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="clientes")
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
private String dni;
public Cliente() {}
public Cliente(String nombre, String dni) {
this.nombre = nombre;
this.dni = dni;
}
public Cliente(String nombre) {
this.nombre = nombre;
}
public Long getId() {
return id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
}

View File

@ -0,0 +1,74 @@
package com.latam.alura.tienda.modelo;
import java.math.BigDecimal;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="items_pedido")
public class ItemsPedido {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private Integer cantidad;
private BigDecimal precio_unitario;
@ManyToOne
private Producto producto;
@ManyToOne
private Pedido pedido;
public ItemsPedido() {}
public ItemsPedido(Integer cantidad, Producto producto, Pedido pedido) {
this.producto = producto;
this.cantidad = cantidad;
this.pedido = pedido;
this.precio_unitario = producto.getPrecio();
}
public Integer getCantidad() {
return cantidad;
}
public void setCantidad(Integer cantidad) {
this.cantidad = cantidad;
}
public BigDecimal getPrecio_unitario() {
return precio_unitario;
}
public void setPrecio_unitario(BigDecimal precio_unitario) {
this.precio_unitario = precio_unitario;
}
public Producto getProducto() {
return producto;
}
public void setProducto(Producto producto) {
this.producto = producto;
}
public Pedido getPedido() {
return pedido;
}
public void setPedido(Pedido pedido) {
this.pedido = pedido;
}
public Long getId() {
return id;
}
public BigDecimal getValor() {
return this.precio_unitario.multiply(new BigDecimal(this.cantidad));
}
}

View File

@ -0,0 +1,76 @@
package com.latam.alura.tienda.modelo;
import java.math.BigDecimal;
import java.time.LocalDate;
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.JoinTable;
//import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="pedidos")
public class Pedido {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private LocalDate fecha = LocalDate.now();
private BigDecimal valorTotal = new BigDecimal(0);
@ManyToOne
private Cliente cliente;
//@ManyToMany
//@JoinTable(name="item_pedido")
@OneToMany(mappedBy = "pedido", cascade = CascadeType.ALL)
private List<ItemsPedido> items = new ArrayList<>();
public Pedido() {}
public Pedido(Cliente cliente) {
this.cliente = cliente;
}
public void agregarItems(ItemsPedido item) {
item.setPedido(this);
this.items.add(item);
this.valorTotal = this.valorTotal.add(item.getValor());
}
public Long getId() {
return id;
}
public LocalDate getFecha() {
return fecha;
}
public void setFecha(LocalDate fecha) {
this.fecha = fecha;
}
public BigDecimal getValorTotal() {
return valorTotal;
}
public void setValorTotal(BigDecimal valorTotal) {
this.valorTotal = valorTotal;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
}

View File

@ -0,0 +1,75 @@
package com.latam.alura.tienda.modelo;
import java.math.BigDecimal;
import java.time.LocalDate;
import javax.persistence.Entity;
//import javax.persistence.EnumType;
//import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="productos")
public class Producto {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
// @Column(name="nombres")
private String nombre;
private String descripcion;
private BigDecimal precio;
private LocalDate fechaDeRegistro = LocalDate.now();
//@Enumerated(EnumType.STRING)
@ManyToOne
private Categoria categoria;
public Producto() {}
public Producto(String nombre, String descripcion, BigDecimal precio, Categoria categoria) {
this.nombre = nombre;
this.descripcion = descripcion;
this.precio = precio;
this.categoria = categoria;
}
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;
}
public LocalDate getFechaDeRegistro() {
return fechaDeRegistro;
}
}

View File

@ -0,0 +1,58 @@
package com.latam.alura.tienda.prueba;
import java.math.BigDecimal;
import javax.persistence.EntityManager;
//import javax.persistence.EntityManagerFactory;
//import javax.persistence.Persistence;
import com.latam.alura.tienda.dao.CategoriaDao;
import com.latam.alura.tienda.dao.ClienteDao;
import com.latam.alura.tienda.dao.PedidoDao;
import com.latam.alura.tienda.dao.ProductoDao;
import com.latam.alura.tienda.modelo.Categoria;
import com.latam.alura.tienda.modelo.Cliente;
import com.latam.alura.tienda.modelo.ItemsPedido;
import com.latam.alura.tienda.modelo.Pedido;
import com.latam.alura.tienda.modelo.Producto;
import com.latam.alura.tienda.utils.JPAUtils;
public class RegistroDePedido {
public static void main(String[] args) {
RegistrarPedido();
EntityManager em = JPAUtils.getEntityManager();
ProductoDao productoDao = new ProductoDao(em);
Producto producto = productoDao.consultaPorId(1L);
ClienteDao clienteDao = new ClienteDao(em);
Cliente cliente = new Cliente("Juan","mnwenic");
PedidoDao pedidoDao = new PedidoDao(em);
Pedido pedido = new Pedido(cliente);
pedido.agregarItems(new ItemsPedido(5,producto, pedido));
em.getTransaction().begin();
clienteDao.guardar(cliente);
pedidoDao.guardar(pedido);
em.getTransaction().commit();
}
public static void RegistrarPedido() {
Categoria celulares = new Categoria("Celulares");
Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), celulares);
EntityManager em = JPAUtils.getEntityManager();
ProductoDao productoDao = new ProductoDao(em);
CategoriaDao categoriaDao = new CategoriaDao(em);
em.getTransaction().begin();
categoriaDao.guardar(celulares);
productoDao.guardar(celular);
em.getTransaction().commit();
em.close();
}
}

View File

@ -0,0 +1,121 @@
package com.latam.alura.tienda.prueba;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.EntityManager;
//import javax.persistence.EntityManagerFactory;
//import javax.persistence.Persistence;
import com.latam.alura.tienda.dao.CategoriaDao;
import com.latam.alura.tienda.dao.ProductoDao;
import com.latam.alura.tienda.modelo.Categoria;
import com.latam.alura.tienda.modelo.Producto;
import com.latam.alura.tienda.utils.JPAUtils;
public class RegistroDeProducto {
public static void main(String[] args) {
RegistrarProducto();
EntityManager em = JPAUtils.getEntityManager();
ProductoDao productoDao = new ProductoDao(em);
Producto producto = productoDao.consultaPorId(1L);
System.out.println(producto.getNombre());
List<Producto> productos = productoDao.consultarTodos();
productos.forEach(producto_ -> System.out.println(producto_.getDescripcion()));
CategoriaDao categoriaDao = new CategoriaDao(em);
List<Categoria> categorias = categoriaDao.consultarTodos();
categorias.forEach(categoria_ -> System.out.println(categoria_.getNombre()));
List<Producto> productos_por_nombre = productoDao.consultaPorNombre("Samsung");
productos_por_nombre.forEach(producto_ -> System.out.println(producto_.getDescripcion()));
List<Producto> productos_por_nombre_categoria = productoDao.consultaPorNombreDeCategoria("Celulares");
productos_por_nombre_categoria.forEach(producto_ -> System.out.println(producto_.getDescripcion()));
BigDecimal precio_producto = productoDao.consultaPrecioPorNombreDeProducto("Samsung");
System.out.println(precio_producto);
/*
Categoria celulares = new Categoria("Celulares");
//Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), Categoria.CELULARES);
Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), celulares);
//celular.setNombre("Samsung");
//celular.setDescripcion("Teléfono usado");
//celular.setPrecio(new BigDecimal("1000"));
//EntityManagerFactory factory = Persistence.createEntityManagerFactory("tienda");
//EntityManager em = factory.createEntityManager();
EntityManager em = JPAUtils.getEntityManager();
ProductoDao productoDao = new ProductoDao(em);
CategoriaDao categoriaDao = new CategoriaDao(em);
em.getTransaction().begin();
categoriaDao.guardar(celulares);
productoDao.guardar(celular);
//em.persist(celular);
//em.getTransaction().commit();
em.flush();
em.clear();
//em.close();
*/
// Acciones por aula
//em.getTransaction().begin();
//V1
/*
em.getTransaction().begin();
em.persist(celulares);
celulares.setNombre("LAPTOPS");
em.getTransaction().commit();
em.close();
celulares.setNombre("PANTALLAS");
*/
//V2
/*
em.persist(celulares);
celulares.setNombre("LAPTOPS");
em.flush();
em.clear();
celulares = em.merge(celulares);
celulares.setNombre("PANTALLAS");
em.flush();
em.remove(celulares);
*/
//V3
/*
em.persist(celulares);
celulares.setNombre("LAPTOPS");
em.flush();
em.clear();
celulares = em.merge(celulares);
celulares.setNombre("PANTALLAS");
em.flush();
//em.clear();
em.remove(celulares);
em.flush();
*/
}
public static void RegistrarProducto() {
Categoria celulares = new Categoria("Celulares");
Producto celular = new Producto("Samsung", "Teléfono usado", new BigDecimal("1000"), celulares);
EntityManager em = JPAUtils.getEntityManager();
ProductoDao productoDao = new ProductoDao(em);
CategoriaDao categoriaDao = new CategoriaDao(em);
em.getTransaction().begin();
categoriaDao.guardar(celulares);
productoDao.guardar(celular);
em.getTransaction().commit();
em.close();
}
}

View File

@ -0,0 +1,14 @@
package com.latam.alura.tienda.utils;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtils {
private static EntityManagerFactory FACTORY = Persistence.createEntityManagerFactory("tienda");
public static EntityManager getEntityManager() {
return FACTORY.createEntityManager();
}
}

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="tienda" transaction-type="RESOURCE_LOCAL">
<!-- En caso de utilizar otro framework distinto de Hibernate
se deben especificar las entidades
<class>com.latam.alura.tienda.modelo.Producto</class>
-->
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<!--
<property name="javax.persistence.jdbc.url" value="jdbc:h2:/mnt/Biblioteca/Code/guias/Java/oracle_one/cursos/010_spring_boot/jpa/tienda2/database/tienda;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false"/>
-->
<property name="javax.persistence.jdbc.url"
value="jdbc:h2:tcp://127.0.1.1:9092//mnt/Biblioteca/Code/guias/Java/oracle_one/cursos/010_spring_boot/jpa/tienda2/database/tienda;DATABASE_TO_UPPER=false;AUTO_SERVER=false"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value="sa"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<!-- hibernate.hdbm2ddl.auto values:
- create: Crea tabla, columnas y datos, de manera persistente
- create-drop: Igual que create, pero elimina todo al terminar la applicación.
- validate: Verifica que todo esté correcto
- update: Crea en caso de que no existan elementos, tablas o datos. Persistente
-->
</properties>
</persistence-unit>
</persistence>

View File

@ -0,0 +1,87 @@
# JPA Avanzado
<style>div.mermaid{text-align: center;}</style>
Retomando el proyecto [anterior](./jpa/tienda/src/main/java/com/latam/alura/tienda/)
```mermaid
erDiagram
Categorias ||--o{ Productos : tiene
Productos {
id bigint PK
nombre varchar
descripcion varchar
precio decimal
categoria_id bigint FK
}
Categorias {
id biging PK
nombre string
}
Clientes ||--o{ Pedidos : tiene
Clientes {
id bigint PK
nombre string
dni string
}
Pedidos {
id bigint PK
fecha date
valor_total decimal
cliente_id bigint FK
}
Items_Pedido {
id bigint PK
producto_id biging FK
pedido_id bigint FK
precio_unitario decimal
cantidad int
}
Pedidos ||--|{ Items_Pedido : tiene
Items_Pedido }|--|| Productos: tiene
```
## H2
Alias para manejar H2
```bash
alias h2server='java -cp ${HOME}/.m2/repository/com/h2database/h2/2.2.222/h2-2.2.222.jar org.h2.tools.Server -tcpAllowOthers -pgAllowOthers'
alias h2console='java -jar ${HOME}/.m2/repository/com/h2database/h2/2.2.222/h2-2.2.222.jar'
```
- Creación de base de datos `h2console`
### H2 en modo servidor
```bash
h2server
TCP server running at tcp://127.0.1.1:9092 (others can connect)
PG server running at pg://127.0.1.1:5435 (others can connect)
Web Console server running at http://127.0.1.1:8082 (only local connections)
```
En [pom.xml](./jpa/tienda2/pom.xml) cambiar la `url` para usar base de datos
creada anteriormente
```xml
...
<properties>
...
<property name="javax.persistence.jdbc.url"
value="jdbc:h2:tcp://127.0.1.1:9092//ruta/database;DATABASE_TO_UPPER=false;AUTO_SERVER=false"/>
...
</properties>
...
```
#### Sumario Aula 1
- Mapeo de nuevas entidades en la aplicación según el modelado de la base de
datos
- Mapeo de una relación con cardinalidad de muchos a muchos
- Mapeo de una relación bidireccional
- Persitencia entidades que tienen relaciones bidireccionales

View File

@ -82,7 +82,7 @@ OJP-->JP
end end
``` ```
JPA es una capa (una abstarcción) se debe usar una biblioteca que la implemente JPA es una capa (una abstracción) se debe usar una biblioteca que la implemente
Existen detalles específicos de Hibernate que dificultan cambiar de implementacion Existen detalles específicos de Hibernate que dificultan cambiar de implementacion
de JPA. Es recomendable mantenerse dentro del patrón de JPA. de JPA. Es recomendable mantenerse dentro del patrón de JPA.
@ -169,10 +169,10 @@ erDiagram
Productos }|--|| Categorias : tiene Productos }|--|| Categorias : tiene
Productos { Productos {
id bigint PK id bigint PK
Nombre varchar nombre varchar
Descripcion varchar descripcion varchar
Precio decimal precio decimal
categoria_id int FK categoria_id bigint FK
} }
Categorias { Categorias {
id biging PK id biging PK

View File

@ -49,3 +49,4 @@ primoridiales en programación con Javascript
- [Base de datos](./010_spring_boot/base_de_datos.md) - [Base de datos](./010_spring_boot/base_de_datos.md)
- [JDBC](./010_spring_boot/jdbc.md) - [JDBC](./010_spring_boot/jdbc.md)
- [Persistencia con JPA - Hibernate](./010_spring_boot/jpa_persistencia_hibernate.md) - [Persistencia con JPA - Hibernate](./010_spring_boot/jpa_persistencia_hibernate.md)
- [JPA consultas avanzadas, rendimiento y modelos complejos](./010_spring_boot/jpa_avanzado.md)