SYS:ONLINE/PUBLICATIONS
BELGIQUE 🇧🇪/CLEARANCE:PUBLIC
RSS
JF FAFCHAMPSsMug@replicatorbe
~/Publications/Développement/hibernate-mapping-ne-pas-oublier-les-getteurs-et-setteurs

Hibernate mapping : ne pas oublier les getteurs et setteurs

Développement / /2 min de lecture

Un mapping Hibernate par annotations entre deux classes, avec cascade : les deux entités sont correctes, la relation est bien déclarée… et rien ne fonctionne tant que les getteurs et setteurs manquent.

Note ajoutée depuis : les entités de cet exemple — un Joueur, une Partie, 4 colonnes, 9 lignes, 7 couleurs — viennent de MasterMind GUI, mon jeu en Java (Swing, Hibernate, Spring MVC) écrit pour les cours — le même dont je migrais la couche DAO six semaines plus tôt. D'où le ton : le billet documente le piège sur lequel je venais de perdre du temps, pas une leçon donnée d'en haut.

Hibernate et un mapping simple.

Dans notre exemple, nous utilisons Hibernate avec annotations. Réaliser des cascades facilement entre 2 classes avec le framework Hibernate.

@Entity
public class Joueur implements Serializable {
    @Id
    @GeneratedValue
    private int id;

    @Column(unique = true)
    private String nom;

    // HIBERNATE VA ALLER RECHERCHER LA VARIABLE J DE LA CLASSE PARTIE
    @OneToMany(mappedBy = "j", cascade = CascadeType.ALL)
    private List<Partie> jeu = new ArrayList<Partie>();

    @Transient
    private JoueurDAO je;

    // un constructeur sans élément est obligatoire.
    public Joueur() {
    }
}
@Entity
public class Partie implements Serializable {
    @Id
    @GeneratedValue
    private int numeropartie = 0;

    private int nbrecolonne = 4;
    private int nbreligne = 9;
    private int nbrecouleur = 7;

    @ManyToOne
    private Joueur j;
}

Hibernate va créer deux tables : « Joueur » et « Partie ». Dans « Partie », nous aurons chaque fois une clef étrangère qui va référencer le joueur. Pour que notre mapping fonctionne dans ce cas présent, nous avons oublié de faire quelque chose ! Il est obligatoire que nous mettions des « getteurs et setteurs » dans nos deux classes !

Pour la classe Partie :

public synchronized Joueur getJ() {
    return j;
}

Pour la classe Joueur :

public List<Partie> getPartie() {
    return jeu;
}

Félicitations, vous êtes arrivé à mapper deux classes !