Bonjour à tous,
je débute avec Hibernate 3.2.5ga Annotations3.3.0ga MySQL et les annotations et après plusieurs heures de recherche dans les forums et sur les sites je suis un peu bloqué.
Imaginez deux Objets Livre et Auteur reliés par une relation NaN coté Livre
Les livres et les auteurs rattachés sont contenus dans une liste.
Lors de la sauvegarde, j'ai une erreur
'Duplicate entry' car le programme essaie d'insérer un Objet Auteur avec la propriété name identique et un Id généré différent.
Si je supprime la contrainte
@Column(unique=true) sur name.
Je n'ai plus d'erreur mais je n'ai plus unicité des Auteurs.
Comment corriger cela ? est ce les Annotations ?
Merci pour toute aide!!
Le code que j'ai utilisé est le suivant:
Code:
for (final Livre livre : ListeLivres) {
session.beginTransaction();
session.merge(livre);
session.getTransaction().commit();
}
Code:
@Entity
public class Livre implements Serializable {
.../...
@ManyToMany(targetEntity=com.package.Auteur.class,cascade=javax.persistence.CascadeType.ALL)
public Set<Auteur> getAuteurs() {
return auteurs;
}
.../...
}
Code:
@Entity
public class Auteur implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public Long getId () {
return this.id;
}
public void setId (Long id) {
this.id = id;
}
private String name;
@Column(unique=true)
public String getName () {
return this.name;
}
public void setName (String name) {
this.name = name;
}
public Auteur() {
}
public Auteur(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Auteur other = (Auteur) obj;
if ( (this.name == null || !this.name.equals(other.name))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
@Override
public String toString() {
if (this.name == null) return new String();
return name;
}