style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

AYUDA CON HIBERNATE org.hibernate.NonUniqueObjectException

Buenas amigos, tengo este error con hibernate y he tratado hacer de todo y no logro darle solución si alguien me puede echar una mano.

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: XXX;

Este es el error que me da, tengo dos tablas las cuales tiene relación de mucho a mucho y la relación me funciona bien sin problemas al insertar cada uno de los elementos nuevos y al modificar uno de ellos, pero al modificar el otro me da este error, levanto una ventana para seleccionar el elemento a agregar al seleccionarlo lo adiciono a la lista de objetos anteriores que tenía y mando a actualizar el objeto. Lo feo es que cuando lo realizo por primera vez para un objeto me funciona pero cuando lo hago mas de una vez aunque pare el programa y lo corra de nuevo no me funciona más, alguna idea. Cualquier pregunta para aclarar la situación será respondida al instante gracias por el tiempo dedicado. Saludos

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Les pongo un poco de código

Les pongo un poco de código para que vean como realizo la los métodos de acceso a datos.

public Ejemplar findById(int id) throws HibernateException {
    Ejemplar ejemplar = null;
    try {  iniciaOperacion();
        ejemplar = (Ejemplar) session.get(Ejemplar.class, id);
        tx.commit();
    } finally {  session.close();   }
    return ejemplar;    }
public void update(Ejemplar ejemplar) throws HibernateException {
    try { iniciaOperacion();
        session.update(ejemplar);
        tx.commit();
    } catch (HibernateException he) {
        manejaExcepcion(he);
        throw he;
    } finally {      session.close();   }   }
private void iniciaOperacion() throws HibernateException {
    session = HibernateUtil.getSessionFactory().openSession();
    tx = session.beginTransaction(); }
private void manejaExcepcion(HibernateException he) throws HibernateException {
            tx.rollback();
    throw new HibernateException("Ocurrió un error en la capa de acceso a datos", he); }

Como ven siempre abro y cierro una sesión cada vez que pido algo a la base de datos no se si será lo optimo pero com me dice en el error que esta repetido el objeto en la sesion.
Donde es que me da el error

        ejemplar = ejemplarDAO.findById(id);
        evento.addEjemplar(ejemplar);
         ejemplarDAO.update(ejemplar);

Cualquier sugerencia al respecto les pongo la configuración de los hbm de ambas entidades.

<list name="eventos" table="ejemplarevento" lazy="false" cascade="save-update" inverse="true" >
        <key column="idejemplar" not-null="true" />
        <list-index ><column name="orden" not-null="true"></column></list-index>
        <many-to-many class="domain.Evento" column="idevento" />
    </list>
<list name="ejemplares" table="ejemplarevento" cascade="save-update" lazy="false" >
        <key column="idevento" not-null="true"  />
        <list-index ><column name="orden" not-null="true"></column></list-index>
        <many-to-many  class="domain.Ejemplar" column="idejemplar" />
    </list>

Pero imagino el problema esta en otro lado ya que con esta configuración me inserta un nuevo elemento en cada una de las tablas y me modifica uno sin problema el problema esta al modificar otro que me lanza el error. he debugiado la aplicación y al llamar al metodo de ejemplar = ejemplarDAO.findById(id); me trae el ejemplar sin ningun problema y entonces lo modifico me lanza el error aqui ejemplarDAO.update(ejemplar); y es como que esta en la session pero es que para cada metodo creo y cierro una session.Saludos

Problema con el hibernate

Es una idea del posible problema que tienes, aunque no he mirado detenidamente el código, pero te la comento por si quieres probarla. El caso es el siguiente: Lo de abrir y cerrar la session cada vez que pides algo a base de datos me parece correcto, pero haciendo esto, una vez que hagas una modificación en uno de los objetos que traes de la base de datos a la session, al realizar el commit se pasará automáticamente a la base de datos, por lo que, en mi opinión, ese sentencia de "update" no sería necesario realizarla.

Ya te digo que es solo una idea de lo que pienso que es. Soy un novato del Hibernate y no llevo casi nada trabajando con el, aunque cada día que pasa ganas mas mi simpatia. Un saludo.

como soy nuevo no se que es

como soy nuevo no se que es lo que me esta pasando porque cuando un ejemplar no pertenece a ningún evento puedo agregar todos los ejemplares que quiera y no me da ningún error pero cuando ya los ejemplares pertenecen a algun evento y trato de agregarlos a un evento nuevo solo me deja agregar un ejemplar.. Alguna idea ... Gracias por el tiempo dedidaco

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">