|
|
@@ -33,6 +33,15 @@ style: |
|
|
|
line-height: 1.5;
|
|
|
}
|
|
|
|
|
|
+ .box-supercompact{
|
|
|
+ font-size: 65% !important;
|
|
|
+ line-height: 1.2;
|
|
|
+ }
|
|
|
+
|
|
|
+ .left{
|
|
|
+ text-align: left;
|
|
|
+ }
|
|
|
+
|
|
|
.columns {
|
|
|
display: flex;
|
|
|
gap: 1em;
|
|
|
@@ -233,10 +242,90 @@ Una entidad define:
|
|
|
|
|
|
<br>
|
|
|
<div class="box w-70 center">
|
|
|
-<strong>La base de datos queda detrás de ese contrato</strong>.
|
|
|
+ <strong>La base de datos queda detrás de ese contrato</strong>.
|
|
|
</div>
|
|
|
<br>
|
|
|
-*Usamos anotaciones para definir las propiedades y relaciones de nuestras entidades. Pej. @Entity, @Table, @Id, @Column, ...*
|
|
|
+
|
|
|
+*Usamos anotaciones para definir las propiedades y relaciones de nuestras entidades*
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+<div class="box-supercompact left">
|
|
|
+
|
|
|
+| Categoría | Anotación | Para qué sirve |
|
|
|
+|---------|----------|---------------|
|
|
|
+| Entidad | `@Entity` | Marca la clase como entidad persistente |
|
|
|
+| | `@Table` | Define la tabla asociada |
|
|
|
+| Identidad | `@Id` | Define la clave primaria |
|
|
|
+| | `@GeneratedValue` | Estrategia de generación del ID |
|
|
|
+| Columnas | `@Column` | Configura nombre, nulabilidad, longitud |
|
|
|
+| | `@Basic` | Atributo persistente simple |
|
|
|
+| Relaciones | `@ManyToOne` | Relación muchos‑a‑uno |
|
|
|
+| | `@OneToMany` | Relación uno‑a‑muchos |
|
|
|
+| | `@OneToOne` | Relación uno‑a‑uno |
|
|
|
+| | `@ManyToMany` | Relación muchos‑a‑muchos |
|
|
|
+| Relaciones | `@JoinColumn` | Define la columna FK |
|
|
|
+| | `@JoinTable` | Tabla intermedia |
|
|
|
+| Carga | `fetch = LAZY / EAGER` | Controla cuándo se cargan relaciones |
|
|
|
+| Ciclo de vida | `@PrePersist` | Callback antes de insertar |
|
|
|
+| | `@PreUpdate` | Callback antes de actualizar |
|
|
|
+| Temporal | `@Temporal` | Mapea fechas a tipos SQL |
|
|
|
+| Herencia | `@Inheritance` | Estrategia de herencia |
|
|
|
+| Control ORM | `@Transient` | Campo no persistente |
|
|
|
+
|
|
|
+</div>
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Anotaciones de control (Spring Data / JPA)
|
|
|
+
|
|
|
+<div class="left">
|
|
|
+
|
|
|
+| Categoría | Anotación | Para qué sirve |
|
|
|
+|---------|----------|---------------|
|
|
|
+| Transacciones | `@Transactional` | Delimita una transacción |
|
|
|
+| | `@Modifying` | Indica que una query modifica datos (DML) |
|
|
|
+| Ciclo de vida | `@PrePersist` | Antes de insertar |
|
|
|
+| | `@PostPersist` | Después de insertar |
|
|
|
+| | `@PreUpdate` | Antes de actualizar |
|
|
|
+| | `@PostUpdate` | Después de actualizar |
|
|
|
+| | `@PreRemove` | Antes de borrar |
|
|
|
+| | `@PostRemove` | Después de borrar |
|
|
|
+
|
|
|
+</div>
|
|
|
+
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Inicialización del esquema (DDL)
|
|
|
+
|
|
|
+<div class="left">
|
|
|
+
|
|
|
+| Opción | Comportamiento |
|
|
|
+|------|---------------|
|
|
|
+| `none` | No hace nada con el esquema |
|
|
|
+| `validate` | Verifica que el esquema exista |
|
|
|
+| `update` | Sincroniza cambios automáticamente |
|
|
|
+| `create` | Borra y crea el esquema |
|
|
|
+| `create-drop` | Crea al arrancar, borra al parar |
|
|
|
+
|
|
|
+</div>
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## Impacto real del DDL automático
|
|
|
+<br>
|
|
|
+<br>
|
|
|
+
|
|
|
+- Útil en desarrollo
|
|
|
+- Peligroso en producción
|
|
|
+- No sustituye migraciones
|
|
|
+- Puede generar cambios costosos
|
|
|
+
|
|
|
+<br>
|
|
|
+<br>
|
|
|
+
|
|
|
+**Decisión de arquitectura, no de código**
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -399,16 +488,6 @@ El rendimiento depende más de la query que del lenguaje.
|
|
|
|
|
|
---
|
|
|
|
|
|
-## Anotaciones de control
|
|
|
-
|
|
|
-- @Transactional -> Control de transacciones
|
|
|
-- @Modifying -> Obligatorio para ejecutar `INSERT` y `UPDATE` en DML
|
|
|
-- @PrePersist, @PostPersist, @PreUpdate, @PostUpdate
|
|
|
-- @Transcient -> No persiste el atributo (dominio)
|
|
|
-
|
|
|
-
|
|
|
----
|
|
|
-
|
|
|
## Algunas técnicas para reducir coste
|
|
|
<div class="box-compact">
|
|
|
|