apuntes:hibernate
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
apuntes:hibernate [2019/02/03 14:37] – [Consideraciones sobre mapeo de relaciones] fernando | apuntes:hibernate [2024/09/16 16:03] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 117: | Línea 117: | ||
< | < | ||
< | < | ||
- | < | + | < |
< | < | ||
Línea 245: | Línea 245: | ||
configuracion.setProperty(" | configuracion.setProperty(" | ||
configuracion.setProperty(" | configuracion.setProperty(" | ||
- | configuracion.setProperty(" | + | configuracion.setProperty(" |
configuracion.setProperty(" | configuracion.setProperty(" | ||
Línea 263: | Línea 263: | ||
< | < | ||
... | ... | ||
- | < | + | < |
</ | </ | ||
- | Si ya existe | + | Puedo utilizar //create// o //update//. //Create// crea la base de datos completa. //Update// la crea si no existe, y si ya existe simplemente modifica los cambios que haya en su estructura. |
+ | |||
+ | Si quiero crear las claves ajenas de forma correcta, me interesa que el motor de datos de la base de datos sea //InnoDB//. | ||
==== Pool de conexiones ==== | ==== Pool de conexiones ==== | ||
Cuando un programa trabaja con una bbdd se deben abrir y cerrar conexiones con ella, y si el programa permite conectar diversos clientes, nos encontramos con el problema de conectar y desconectar conexiones a la base de datos. Un //pool// de conexiones es un conjunto (pool) de conexiones ya conectadas a la base de datos que puedan ser reutilizadas entre distintas peticiones. | Cuando un programa trabaja con una bbdd se deben abrir y cerrar conexiones con ella, y si el programa permite conectar diversos clientes, nos encontramos con el problema de conectar y desconectar conexiones a la base de datos. Un //pool// de conexiones es un conjunto (pool) de conexiones ya conectadas a la base de datos que puedan ser reutilizadas entre distintas peticiones. | ||
Línea 616: | Línea 618: | ||
{{ youtube> | {{ youtube> | ||
- | \\ | + | > Operaciones CRUD con hibernate |
==== Consideraciones sobre mapeo de relaciones==== | ==== Consideraciones sobre mapeo de relaciones==== | ||
Cuando realizamos relaciones bi-direccionales de las clases, desde Java podemos acceder a los elementos relacionados desde cualquier de los dos objetos de una relación. Para ello utilizaremos atributos únicos en el lado de '' | Cuando realizamos relaciones bi-direccionales de las clases, desde Java podemos acceder a los elementos relacionados desde cualquier de los dos objetos de una relación. Para ello utilizaremos atributos únicos en el lado de '' | ||
- | Aunque las relaciones sean bidireccionales, | + | Aunque las relaciones sean bidireccionales, |
===Relaciones 1:N=== | ===Relaciones 1:N=== | ||
- | En las relaciones | + | En las relaciones '' |
<code java> | <code java> | ||
Línea 637: | Línea 640: | ||
| | ||
//Métodos utilitarios | //Métodos utilitarios | ||
+ | // | ||
public void addPersonaje(Personaje personaje){ | public void addPersonaje(Personaje personaje){ | ||
| | ||
Línea 644: | Línea 648: | ||
public void removePersonaje(Personaje personaje){ | public void removePersonaje(Personaje personaje){ | ||
| | ||
- | if(personajes.contains(personaje){ | + | |
- | personajes.remove(personaje); | + | } |
+ | |||
+ | //Añadir varios (también puedo tener un método de eliminar varios) | ||
+ | public void addPersonajes(Collection< | ||
+ | for(Personaje personaje : personajes){ | ||
+ | personaje.setArma(this); | ||
} | } | ||
+ | | ||
} | } | ||
. . . | . . . | ||
} | } | ||
</ | </ | ||
+ | |||
+ | **Los métodos anteriores también se deben codificar en la clase // | ||
Además en esta clase //padre//, cuando borramos un arma también se borrarán los personajes relacionados con dicho arma en la base de datos, para mantener la integridad de las claves ajenas (personaje.id_arma). Si queremos que al borrar un arma no se borren los personajes en cascada, primero podemos eliminar las relaciones del arma con los personajes, antes de borrar el arma. Podemos realizarlo con un método utilitario: | Además en esta clase //padre//, cuando borramos un arma también se borrarán los personajes relacionados con dicho arma en la base de datos, para mantener la integridad de las claves ajenas (personaje.id_arma). Si queremos que al borrar un arma no se borren los personajes en cascada, primero podemos eliminar las relaciones del arma con los personajes, antes de borrar el arma. Podemos realizarlo con un método utilitario: | ||
Línea 661: | Línea 673: | ||
persona.setArma(null); | persona.setArma(null); | ||
} | } | ||
- | | + | |
} | } | ||
. . . | . . . | ||
Línea 667: | Línea 679: | ||
===Relaciones N:M=== | ===Relaciones N:M=== | ||
- | En las relaciones @ManytoMany ambas clases funcionan como //padre// y también como //hijo//, pero también identificamos una clase para propagar los cambios. En este caso los métodos utilitarios | + | En las relaciones @ManytoMany ambas clases funcionan como //padre// y también como // |
<code java> | <code java> | ||
Línea 681: | Línea 693: | ||
| | ||
//Métodos utilitarios | //Métodos utilitarios | ||
+ | //Para añadir/ | ||
public void addEnemigo(Enemigo enemigo){ | public void addEnemigo(Enemigo enemigo){ | ||
+ | | ||
| | ||
- | | ||
} | } | ||
| | ||
public void removeEnemigo(Enemigo enemigo){ | public void removeEnemigo(Enemigo enemigo){ | ||
- | | + | |
- | if(enemigos.contains(enemigo){ | + | |
- | enemigos.remove(enemigo); | + | } |
+ | |||
+ | //Para añadir/ | ||
+ | public void addEnemigos(Collection< | ||
+ | | ||
+ | | ||
+ | } | ||
+ | this.enemigos.addAll(enemigos); | ||
+ | } | ||
+ | |||
+ | public void removeEnemigos(Collection< | ||
+ | | ||
+ | enemigo.getArmas().remove(this); | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | |||
+ | //Eliminar las relaciones con este arma | ||
+ | public void removeAllEnemigos(Collection< | ||
+ | | ||
+ | enemigo.getArmas().remove(this); | ||
} | } | ||
+ | | ||
} | } | ||
. . . | . . . | ||
Línea 696: | Línea 730: | ||
</ | </ | ||
- | Otro aspecto a tener en cuenta es que en las relaciones '' | + | **También debemos incluir los métodos |
- | Del mismo modo, si queremos crear el esquema de la base de datos a partir de las clases mapeadas, solo usando | + | Otro aspecto |
+ | Del mismo modo, si queremos crear el esquema de la base de datos a partir de las clases mapeadas, **solo usando colecciones tipo '' | ||
===== Proyectos de ejemplo ===== | ===== Proyectos de ejemplo ===== | ||
* [[https:// | * [[https:// |
apuntes/hibernate.1549204634.txt.gz · Última modificación: 2024/09/16 16:05 (editor externo)