Hibernate es compatible tanto con la asignación de listas y bolsas como con la asignación de conjuntos. Por lo tanto, habrá una compensación con respecto a cuál es el mejor tipo de datos para usar. La elección se basará puramente en los requisitos, pero aún así, veamos las diferencias entre ellos. Siempre que haya una relación de uno a muchos o una relación de muchos a muchos, etc., necesitamos tener una asignación de lista o bolsa.
Asignación de listas
Veamos los archivos de configuración mientras usamos List Mapping
XML
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="<Sample POJO class>" table="<Sample table>"> <id name="id" type="int" column="id"> <generator class="native"></generator> </id> <!-- Other properties --> <list name="<some collection of fields like certifications, subjects etc., >" cascade="all"> <key column="id"/> <!-- This is much required as this indicates as a pointer for insertion/deletion/updation--> <list-index column="idx"/> <one-to-many class="<sample POJO class>"/> </list> </class> </hibernate-mapping>
Asignación de bolsas
Veamos los archivos de configuración mientras Bag Mapping.
XML
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 5.3//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="<Sample POJO class>" table="<Sample table>"> <id name="id"> <generator class="increment"></generator> </id> <!-- Other properties --> <!-- This is almost like a list but here we are using bag instead of a list. Main advantage is it does not have a index element --> <bag name="<Some collections>" table="<Sample table>"> <key column="id"></key> <element column="<a column>" type="string"></element> </bag> </class> </hibernate-mapping>
En los requisitos de implementación de producción o para el producto en vivo, desde el punto de vista del rendimiento, debemos optar por el mapeo de bolsas como la mejor opción. Como el mapeo de listas requiere un orden, las operaciones de la base de datos ralentizan las consultas y llevará mucho tiempo mostrar los datos. Por otro lado, el mapeo de bolsas es la mejor opción y siempre que sea necesario realizar un pedido, es posible que necesitemos usar la consulta JPQL con una cláusula ‘ordenar por’. Veamos las diferencias con Set también con respecto a las operaciones de base de datos e hibernación.
Ordenar |
Duplicar |
|
---|---|---|
Establecer |
esta desordenado | No permitirá duplicados |
Lista |
esta ordenado | Permitirá duplicados |
Bolsa |
esta desordenado | Permitirá duplicados |
Tabla de diferencias
Asignación de listas |
Asignación de bolsas |
---|---|
El paquete java.util contiene List. | El paquete java.util no contiene Bag. |
En Hibernate, usando java.util.List podemos mapear List. | En Hibernate, usando java.util.List podemos mapear Bag. |
La lista está ordenada y puede tener duplicados. | La bolsa está desordenada y permite duplicados. |
Este enfoque ralentiza las operaciones de la base de datos, ya que recuperar las asociaciones de manera ordenada afectará el rendimiento. | Este es un enfoque eficiente ya que recuperar las asociaciones como (uno a muchos o muchos a más) de manera desordenada proporciona un mejor rendimiento. |
De forma predeterminada, obtenemos resultados ordenados pero lentos en cuanto al rendimiento. | Para lograr el pedido, es posible que necesitemos usar JPQL Query con un pedido por, pero solo cuando sea necesario podemos hacerlo y, por lo tanto, es uno adicional. |
En versiones anteriores de Hibernate (anteriores a la 5.0.8), mientras usaba java.util.List y fusionaba la entidad principal, Hibernate generaba 2 declaraciones de inserción para cada nueva entidad secundaria. | No requiere un elemento de índice y es casi similar a List only. Al comparar con List, se prefiere Bag. |
Para asociaciones de muchos a muchos, manejar el mapeo de listas es una mala práctica. Establecer asignación es la mejor opción. | Almost Bag se comporta de la misma manera que Set y depende del requerimiento, se puede decidir elegir Set o Bag |
Se necesita un elemento de secuencia. | No es necesario un elemento de secuencia. |
Publicación traducida automáticamente
Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA