Omet navegació

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 getset, 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 getset 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 ...