Hibernate – Mapeo de colecciones

Los elementos de colección son muy necesarios para tener relaciones de uno a muchos, de muchos a muchos, etc. Cualquier tipo de los siguientes se puede usar para declarar el tipo de colección en la clase Persistente. Clase persistente de uno de los siguientes tipos:

  • java.util.Lista
  • java.util.Set
  • java.util.SortedSet
  • java.util.mapa
  • java.util.SortedMap
  • java.util.Colección

Veamos dónde podemos usar List, Set y Map al ver las diferencias entre ellos.

Lista

Establecer

Mapa

Se permiten duplicados. No se permiten duplicados. No se permiten duplicados.
Se mantiene el orden de inserción. El orden de inserción no se mantiene. El orden de inserción no se mantiene.
El elemento de índice ayuda a identificar un elemento en la lista. Por lo tanto, debe usar esto siempre que el índice sea posible y sea obligatorio. Para mantener de forma única la colección de elementos, podemos optar por el conjunto. Como un patrón de par clave/valor significa que podemos optar por Map.

Lista de mapeo

clase POJO

Java

import java.util.List;
  
public class<POJO class> {
    private int id;
    private String variableString;
    // other data members
    private List<String>
        collectionItems; // List can be of any type
                         // if we use another POJO class in
                         // the list to have one to many/many
                         // to many relationships We need to
                         // define Another POJO class in this
                         // case
    private List < Another POJO class
    > collectionItems1
  
    // getters and setters
}

XML

XML

<class name="<Respective POJO class>" table="<Respective table>">  
    <id name="id">  
     <generator class="increment"></generator>  
    </id>  
      
      <!--other properties -->
    <list name="<collectionItems>" table="<Respective child table>">  
    
    <!-- foreign key in child table that refers to Primary table -->
    <key column="id"></key>  
    
    <!-- For identification. List/Map are indexed collection -->
    <index column="type"></index>  
    
    <!-- collection element of type element> -->
    <element column="answer" type="string"></element></list>  
    
      <!-- If we are using one to many relationship -->
    <list name="<collectionItems>" >  
          <key column="id"></key>  
          <index column="type"></index>  
          <one-to-many class="<Respective child POJO class>" />  
    </list>  
</class>

En el archivo java principal donde podemos hacer operaciones CRUD, tenemos que asociar una Lista de la siguiente manera

archivo java principal

Java

// Rest of code ....
ArrayList<String> list1 = new ArrayList<String>();
list1.add("example1");
list1.add("example2");

No solo List, sino que también podemos usar Bag, Set y Map en las colecciones.

Bolsa de mapeo

Esto es casi similar a List pero el elemento de índice no es necesario

Ejemplo de clase POJO

Java

import java.util.List;
  
public class<POJO class> {
    private int id;
    private String variableString;
    // other data members
    private List<String>
        collectionItems; // List can be of any type
                         // if we use another POJO class in
                         // the list to have one to many/many
                         // to many relationships We need to
                         // define Another POJO class in this
                         // case
    private List < Another POJO class
    > collectionItems1
  
    // getters and setters
}

En Hibernate Mapping, difiere de la Lista

XML

<!-- Rest of the properties -->
<bag name="<collectionname>" table="<Respective POJO class>">  
     <key column="<foreignKeyId>"></key>  
     <!-- Here we do not have index, that is the difference with the list -->
     <element column="<collectionColumn>" type="string"></element>  
</bag>

El archivo principal de Java es similar al que se usa para la lista.

Principal diferencia entre List y Bag: en List, el elemento de índice es obligatorio y se mantiene el orden. En Bag, no hay elemento de índice y, por lo tanto, no hay orden.

Conjunto de mapeo

XML

XML

<class name="<POJO>" table="<Respective table>">  
       ...        
          <set name="<collection Items>" table="<child table>">  
          <key column="id"></key>  
          <element column="<collection column>" type="string"></element>  
          </set>  
       ...  
</class>

clase POJO

Java

import java.util.Set;
  
public class<POJO> {
    private int id;
    // other data members
    // Collection item has to be represented via Set
    private Set<String> collectionItems;
  
    // getters and setters
}

archivo java principal

Java

//.....
HashSet<String> set1 = new HashSet<String>();
set1.add("example1");
set1.add("example2");
//....

Mapa de mapeo

XML

XML

<class ....>
  ....
  <map name="<collectionitems>" table="<table>" cascade="all">  
  <key column="id"></key>  
  <!-- In List and Map, index column is required -->
  <index column="<columnname>" type="string"></index>  
  <element column="<columnname>" type="string"></element>  
  </map>  
  ...
</class>  

clase POJO

Java

import java.util.Map;
  
public class<POJO> {
    private int id;
    // other data members
    // a key value is maintained
    private Map<String, String> collectionItems;

archivo java principal

Java

//....
HashMap<String, String> map1
    = new HashMap<String, String>();
map1.put("key1", "value1");
map1.put("key2", "value2");
//....

SortedSet y SortedMap por el nombre en sí, podemos llegar a saber que si un conjunto está ordenado (orden ascendente por defecto)/un mapa está ordenado (orden ascendente por defecto)

Asignación de conjunto ordenado

clase POJO

Java

//...
private SortedSet collectionItems;
//....

XML

XML

<!-- .. -->
<!-- Here this POJO class should implement comparator
      or we can leave it as natural-->
<set name = "<collectionItems>" cascade="all" sort="<POJO class>">
         <key column = "id"/>
         <one-to-many class="<child POJO class>"/>
      </set>
<!-- .... -->

archivo java principal

Java

// we can use Treeset
//....
TreeSet set2 = new TreeSet();
set2.add(new<Child POJO class>(<value>));
//...

Del mismo modo, SortedMap es similar al mapa y, de forma predeterminada, sigue un orden de clasificación natural o podemos personalizarlo.

Mapeo OrdenadoMapa

clase POJO

Java

//...
private SortedMap collectionItems;
//...

XML

XML

<map name="collectionItems" cascade="all"  sort="natural" >
       <key column="id"/>
       <index column="indexColumn"  type="string"/>
       <one-to-many class="<child POJO class>"/>
</map>

Archivo Java principal

Java

//...
TreeMap map = new TreeMap();
map.put("key1", value1);
map.put("key2", value2);
map.put("key3", value3);
//...

Conclusión

Al usar diferentes patrones, de acuerdo con los requisitos, podemos usar el mapeo de colecciones en hibernación.

  • Para ordenar, use Lista
  • Para singularidad, use Set
  • Para el mantenimiento de clave-valor, use Mapa
  • El uso de SortedMap/SortedSet no es una solución ideal, ya que degradará el rendimiento. En su lugar, podemos optar por JPQL y agregar una cláusula Ordenar por.

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *