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