6 - Classes generades
Comentem les classe que ha generat automàticament Hibernate. Posarà una propietat per cada camp de la taula, i alguna cosa més com veurem més endavant. També posarà un mètode get i un set per a cada propietat, ja que les propietats seran private.
També posa tres constructors: un sense paràmetres, un altre només amb la clau principal (i segurament els camps no nuls), i un altre complet.
A continuació mostrem 2 de les classes. En el cas de Poblacio no hem posat tots els mètodes get i set, ja que sempre són com cabria esperar. I en roig teniu el més destacable.
| Comarca.java | Poblacio.java |
|
package classes;
import java.util.HashSet; import java.util.Set; public class Comarca implements java.io.Serializable { private String nomC; private String provincia; private Set<Poblacio> poblacios = new HashSet<Poblacio>(0); public Comarca() { } public Comarca(String nomC) { this.nomC = nomC; } public Comarca(String nomC, String provincia, Set<Poblacio> poblacios) { this.nomC = nomC; this.provincia = provincia; this.poblacios = poblacios; } public String getNomC() { return this.nomC; } public void setNomC(String nomC) { this.nomC = nomC; } public String getProvincia() { return this.provincia; } public void setProvincia(String provincia) { this.provincia = provincia; } public Set<Poblacio> getPoblacios() { return this.poblacios; } public void setPoblacios(Set<Poblacio> poblacios) { this.poblacios = poblacios; } } |
package classes;
// Generated 29/04/2018 13:28:33 by Hibernate Tools 5.2.5.Final import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; /** * Poblacio generated by hbm2java */ public class Poblacio implements java.io.Serializable { private int codM; private Comarca comarca; private String nom; private Integer poblacio; private BigDecimal extensio; private Short altura; private String longitud; private String latitud; private Character llengua; private Set<Institut> instituts = new HashSet<Institut>(0); public Poblacio() { } public Poblacio(int codM, String nom) { this.codM = codM; this.nom = nom; } public Poblacio(int codM, Comarca comarca, String nom, Integer poblacio, BigDecimal extensio, Short altura, String longitud, String latitud, Character llengua, Set<Institut> instituts) { this.codM = codM; this.comarca = comarca; this.nom = nom; this.poblacio = poblacio; this.extensio = extensio; this.altura = altura; this.longitud = longitud; this.latitud = latitud; this.llengua = llengua; this.instituts = instituts; } ... public Comarca getComarca() { return this.comarca; } public void setComarca(Comarca comarca) { this.comarca = comarca; } ... public Set<Institut> getInstituts() { return this.instituts; } public void setInstituts(Set<Institut> instituts) { this.instituts = instituts; } } |
Observeu com els mètodes get i set sempre comencen per aquesta paraula seguida del nom de la propietat amb la inicial en majúscula. Per tant, Hibernate sabrà quin mètode gastar per a cada propietat
Sens dubte, el més destacable de la classe Comarca és que en les propietats, posa també un conjunt d'objectes Poblacio. Açò ens permetrà accedir comodíssimament a les poblacions d'una determinada comarca. Aquest conjunt sempre l'anomena com la classe a què fa referència, però en plural (en el nostre cas poblacios). Un conjunt (Set) té un comportament relativament senzill per a accedir als seus elements.
En la classe Poblacio, tindrem les propietats que cabria esperar. I la referència a la comarca és un objecte de la classe Comarca. També tindrà un conjunt d'objectes Institut.
Per tant, i en resum, una cosa molt útil que fa Hibernate quan troba una clau externa, és posar en la classe corresponent a la taula on està la clau externa una propietat de la classe corresponent a la taula principal (cosa que en principi cabria esperar); però també en la classe corresponent a la taula principal, un conjunt d'objectes de la classe corresponent a l'altra taula, la qual cosa ens permetrà accedir fàcilment.
No en tots els SGBD el comportament serà tan bo. Sí que ho farà en Oracle, en PostgreSQL, i segurament en MySQL. En canvi no ho podrà fer en SQLite, en els qual només hi haurà propietats de tipus senzills per cadascun dels camps, i prou. Però com de moment tampoc podrem connectar amb SQLite per mig d'Hibernate ...
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 2.5