5 Replies Latest reply on Dec 7, 2006 10:51 AM by Martin Hesse

    ManyToMany constraints problem

    Alberto Martinez Newbie


      I have some problems using a ManyToMany relationship model. I think that it is an error in my implementation (probably with the CascadeType), but I don't know how to mend it.

      I have this model:

      public class Libro implements Serializable {
       @ManyToMany (cascade = {CascadeType.PERSIST})
       @JoinTable(name = "LibrosEtiquetas", joinColumns = { @JoinColumn(name = "idLibro") }, inverseJoinColumns = { @JoinColumn(name = "idEtiqueta") })
       private List<Etiqueta> etiquetas;

      public class Etiqueta implements Serializable {
       @ManyToMany(cascade = { CascadeType.PERSIST }, mappedBy = "etiquetas")
       private List<Libro> libros;

      When I persist a "libro" and the List is filled with "etiquetas" that doesn't exist in the database, it woks ok. It create the new "libro", the new "etiquetas" and the relation in the join table.

      But if I persist with any existent "etiqueta" in the List it returns me an exception because it tries to create the "etiqueta" again... I don't know how can get that it does not try to create an "etiqueta" which is already created.

      Caused by: java.sql.BatchUpdateException: Duplicate entry 'dos' for key 1
       at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:657)
       at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:517)
       at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
       at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)

      Thank, and sorry for my english :D