Hibernate Annotations and getter/setter (French and English versions)

L’utilisation du framework Hibernate pour gérer la persistence d’objets Java en base de données présente beaucoup d’avantages (par exemple, si je charge un objet Stage dans l’action Struts2 correspondant à ma page modifier_stage.jsp, les attributs de ma classe Stage sont automatiquement ventilés sur le bon field de mon formulaire), et quelques inconvénients, ou plutôt quelques subtilités.

Je pense notamment à l’emplacement des getter/setter dans les classes persistentes. Le code ci-dessous me produisait l’erreur Unknown column ‘stage.categorie’ in ‘field list’ :

@Column(name=”categorie”)
public void setCategorie(String categorie) {
    this.categorie = categorie;
}
public String getCategorie() {
    return categorie;
}

Après 2 bonnes heures de jurons, de bidouillage de la base, et de réécriture de classes Java, j’ai enfin vu d’où venait le bug.

@Column(name=”categorie”)
public String getCategorie() {
    return categorie;
}
public void setCategorie(String categorie) {
    this.categorie = categorie;
}

Yep, l’annotation Hibernate doit se situer au-dessus du getter (merci, Annso pour la précision : http://stackoverflow.com/questions/3286508/where-to-put-hibernate-annotations). Et après, on se demande pourquoi je passe mon temps à maudire Hibernate.


——————————————————————————————————————-


Using the Hibernate framework to persist Java objects can sometimes be very tricky. For instance, the following code took me 2 hours to get rid of the Unknown column ‘stage.categorie’ in ‘field list’ exception:

@Column(name=”categorie”)
public void setCategorie(String categorie) {
    this.categorie = categorie;
}
public String getCategorie() {
    return categorie;
}

After rewriting my whole Java class, I finally obtained a working code.
@Column(name=”categorie”)
public String getCategorie() {
    return categorie;
}
public void setCategorie(String categorie) {
    this.categorie = categorie;
}

Yep. All you have to do is put the getter right under the Hibernate annotation (http://stackoverflow.com/questions/3286508/where-to-put-hibernate-annotations). Now you get what knavish means.

Advertisements

2 thoughts on “Hibernate Annotations and getter/setter (French and English versions)

  1. annso says:

    C'est pas plutôt du au fait que l'annotation doit être sur le getter plutôt que sur le setter ?(Coucou au fait !)

  2. Monica Nguon says:

    En effet, je corrige le post, du coup ! (Coucou back)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: