java - jpa part of composite primary key also part of composite foreign key -


i'm having problems mapping thwo relations between 3 of jpa entities. first of all, show database tables involved:

  1. ciclista

    idciclista (pk)
    (rest of fields...)

  2. prueba

    idprueba (pk)
    (rest of fields...)

  3. inscripcion

    idciclista (pk, fk in ciclista.idciclista)
    idprueba (pk, fk in prueba.idprueba, fk in variante.idprueba)
    idvariante (fk in variante.idvariante)
    (rest of fields...)

  4. variante

    idprueba (pk, fk in prueba.idprueba)
    idvariante (pk)
    (rest of fields...)

the problem highlighted field, part of composite pk of inscripcion, fk in prueba , part of composite fk in variante, @ same time.

my jpa entity:

@entity @table(name = "inscripcion") @idclass(value=inscripcionpk.class) public class inscripcion {     // attributes     @column     private int dorsal;     @column     @temporal(temporaltype.timestamp)     private date fechahora;     @column     private int estado;      // relationships     @id     @manytoone     @joincolumn(name = "idciclista")     private ciclista participante;     @id     @manytoone     @joincolumn(name = "idprueba", insertable=false, updatable=false)     private prueba prueba;     @manytoone     @joincolumns({           @joincolumn(name="idprueba"),           @joincolumn(name="idvariante")     })      private variante variante;  //constructors, public getters , setters... } 
@embeddable public class inscripcionpk implements serializable {     private static final long serialversionuid = -582735882125091352l;      int participante;     int prueba;      //public getters , setters, hashcode, equals... } 

i don't paste rest of mappings because didn't caused me problem far, have references current entity (bidirectional mappings).

i following exception when persisting "inscripcion" object:

... caused by: javax.persistence.persistenceexception: org.hibernate.exception.genericjdbcexception: parameter index out of range (7 > number of parameters, 6).     @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1377)     @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1300)     @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1306)     @ org.hibernate.ejb.abstractentitymanagerimpl$callbackexceptionmapperimpl.mapmanagedflushfailure(abstractentitymanagerimpl.java:1500)     @ org.hibernate.engine.transaction.synchronization.internal.synchronizationcallbackcoordinatorimpl.beforecompletion(synchronizationcallbackcoordinatorimpl.java:109)     @ org.hibernate.engine.transaction.synchronization.internal.registeredsynchronization.beforecompletion(registeredsynchronization.java:53)     @ com.sun.enterprise.transaction.javaeetransactionimpl.commit(javaeetransactionimpl.java:435)     ... 90 more caused by: org.hibernate.exception.genericjdbcexception: parameter index out of range (7 > number of parameters, 6).     @ org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconverter.java:54)     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:125)     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:110)     @ org.hibernate.engine.jdbc.internal.proxy.abstractstatementproxyhandler.continueinvocation(abstractstatementproxyhandler.java:129)     @ org.hibernate.engine.jdbc.internal.proxy.abstractproxyhandler.invoke(abstractproxyhandler.java:81)     @ sun.proxy.$proxy211.setint(unknown source)     @ org.hibernate.type.descriptor.sql.integertypedescriptor$1.dobind(integertypedescriptor.java:57)     @ org.hibernate.type.descriptor.sql.basicbinder.bind(basicbinder.java:92)     @ org.hibernate.type.abstractstandardbasictype.nullsafeset(abstractstandardbasictype.java:280)     @ org.hibernate.type.abstractstandardbasictype.nullsafeset(abstractstandardbasictype.java:275)     @ org.hibernate.type.componenttype.nullsafeset(componenttype.java:358)     @ org.hibernate.persister.entity.abstractentitypersister.dehydrateid(abstractentitypersister.java:2784)     @ org.hibernate.persister.entity.abstractentitypersister.dehydrate(abstractentitypersister.java:2753)     @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:3025)     @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:3469)     @ org.hibernate.action.internal.entityinsertaction.execute(entityinsertaction.java:88)     @ org.hibernate.engine.spi.actionqueue.execute(actionqueue.java:362)     @ org.hibernate.engine.spi.actionqueue.executeactions(actionqueue.java:354)     @ org.hibernate.engine.spi.actionqueue.executeactions(actionqueue.java:275)     @ org.hibernate.event.internal.abstractflushingeventlistener.performexecutions(abstractflushingeventlistener.java:326)     @ org.hibernate.event.internal.defaultflusheventlistener.onflush(defaultflusheventlistener.java:52)     @ org.hibernate.internal.sessionimpl.flush(sessionimpl.java:1213)     @ org.hibernate.internal.sessionimpl.managedflush(sessionimpl.java:402)     @ org.hibernate.engine.transaction.synchronization.internal.synchronizationcallbackcoordinatorimpl.beforecompletion(synchronizationcallbackcoordinatorimpl.java:104)     ... 92 more caused by: java.sql.sqlexception: parameter index out of range (7 > number of parameters, 6).     @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1074)     @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:988)     @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:974)     @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:919)     @ com.mysql.jdbc.preparedstatement.checkbounds(preparedstatement.java:3813)     @ com.mysql.jdbc.preparedstatement.setinternal(preparedstatement.java:3795)     @ com.mysql.jdbc.preparedstatement.setinternal(preparedstatement.java:3840)     @ com.mysql.jdbc.preparedstatement.setint(preparedstatement.java:3784)     @ com.mysql.jdbc.jdbc2.optional.preparedstatementwrapper.setint(preparedstatementwrapper.java:399)     @ com.sun.gjc.spi.base.preparedstatementwrapper.setint(preparedstatementwrapper.java:190)     @ sun.reflect.generatedmethodaccessor82.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:616)     @ org.hibernate.engine.jdbc.internal.proxy.abstractstatementproxyhandler.continueinvocation(abstractstatementproxyhandler.java:122) 

if put "insertable = false, updatable = false" in @joincolum's @ "variante", following exception:

... caused by: javax.persistence.persistenceexception: org.hibernate.exception.constraintviolationexception: cannot add or update child row: foreign key constraint fails (`projectbike`.`inscripcion`, constraint `fk_inscripcion_variante1` foreign key (`idvariante`, `idprueba`) references `variante` (`idvariante`, `idprueba`) on delete no action on update no acti)     @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1377)     @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1300)     @ org.hibernate.ejb.abstractentitymanagerimpl.convert(abstractentitymanagerimpl.java:1306)     @ org.hibernate.ejb.abstractentitymanagerimpl$callbackexceptionmapperimpl.mapmanagedflushfailure(abstractentitymanagerimpl.java:1500)     @ org.hibernate.engine.transaction.synchronization.internal.synchronizationcallbackcoordinatorimpl.beforecompletion(synchronizationcallbackcoordinatorimpl.java:109)     @ org.hibernate.engine.transaction.synchronization.internal.registeredsynchronization.beforecompletion(registeredsynchronization.java:53)     @ com.sun.enterprise.transaction.javaeetransactionimpl.commit(javaeetransactionimpl.java:435)     ... 90 more caused by: org.hibernate.exception.constraintviolationexception: cannot add or update child row: foreign key constraint fails (`projectbike`.`inscripcion`, constraint `fk_inscripcion_variante1` foreign key (`idvariante`, `idprueba`) references `variante` (`idvariante`, `idprueba`) on delete no action on update no acti)     @ org.hibernate.exception.internal.sqlexceptiontypedelegate.convert(sqlexceptiontypedelegate.java:74)     @ org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconverter.java:49)     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:125)     @ org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.java:110)     @ org.hibernate.engine.jdbc.internal.proxy.abstractstatementproxyhandler.continueinvocation(abstractstatementproxyhandler.java:129)     @ org.hibernate.engine.jdbc.internal.proxy.abstractproxyhandler.invoke(abstractproxyhandler.java:81)     @ sun.proxy.$proxy233.executeupdate(unknown source)     @ org.hibernate.engine.jdbc.batch.internal.nonbatchingbatch.addtobatch(nonbatchingbatch.java:56)     @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:3028)     @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:3469)     @ org.hibernate.action.internal.entityinsertaction.execute(entityinsertaction.java:88)     @ org.hibernate.engine.spi.actionqueue.execute(actionqueue.java:362)     @ org.hibernate.engine.spi.actionqueue.executeactions(actionqueue.java:354)     @ org.hibernate.engine.spi.actionqueue.executeactions(actionqueue.java:275)     @ org.hibernate.event.internal.abstractflushingeventlistener.performexecutions(abstractflushingeventlistener.java:326)     @ org.hibernate.event.internal.defaultflusheventlistener.onflush(defaultflusheventlistener.java:52)     @ org.hibernate.internal.sessionimpl.flush(sessionimpl.java:1213)     @ org.hibernate.internal.sessionimpl.managedflush(sessionimpl.java:402)     @ org.hibernate.engine.transaction.synchronization.internal.synchronizationcallbackcoordinatorimpl.beforecompletion(synchronizationcallbackcoordinatorimpl.java:104)     ... 92 more caused by: com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityconstraintviolationexception: cannot add or update child row: foreign key constraint fails (`projectbike`.`inscripcion`, constraint `fk_inscripcion_variante1` foreign key (`idvariante`, `idprueba`) references `variante` (`idvariante`, `idprueba`) on delete no action on update no acti)     @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method)     @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:57)     @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45)     @ java.lang.reflect.constructor.newinstance(constructor.java:532)     @ com.mysql.jdbc.util.handlenewinstance(util.java:411)     @ com.mysql.jdbc.util.getinstance(util.java:386)     @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1040)     @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4096)     @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4028)     @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2490)     @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2651)     @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2734)     @ com.mysql.jdbc.preparedstatement.executeinternal(preparedstatement.java:2155)     @ com.mysql.jdbc.preparedstatement.executeupdate(preparedstatement.java:2458)     @ com.mysql.jdbc.preparedstatement.executeupdate(preparedstatement.java:2375)     @ com.mysql.jdbc.preparedstatement.executeupdate(preparedstatement.java:2359)     @ com.mysql.jdbc.jdbc2.optional.preparedstatementwrapper.executeupdate(preparedstatementwrapper.java:875)     @ com.sun.gjc.spi.base.preparedstatementwrapper.executeupdate(preparedstatementwrapper.java:125)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:616)     @ org.hibernate.engine.jdbc.internal.proxy.abstractstatementproxyhandler.continueinvocation(abstractstatementproxyhandler.java:122)     ... 106 more 

i dont know if hibernate bug, if case not suported jpa or if i'm missing obvious.


edit:

i post variante class, becaus has composite key too. hope helps:

@entity @table(name="variante") @idclass(value=variantepk.class) public class variante {     //atributos     @id     @column(name="idvariante")     private short id;     @column     private string nombre;     @column     private integer longitud;     @column     private integer desnivelpos;     @column     private boolean mostrartrack;      //relaciones     @id     @manytoone(optional = false, cascade=cascadetype.all)     @joincolumn(name="idprueba")     private prueba prueba;     @manytoone(cascade = cascadetype.all)     @joincolumn(name="idrecorrido")     private recorrido recorrido;     @onetomany(mappedby = "variante", cascade = cascadetype.all, fetch=fetchtype.eager)     private set<inscripcion> inscripciones;      // consructors, getters , setters... } 
public class variantepk implements serializable {     private static final long serialversionuid = -3276237020478540672l;      private short id;     private integer prueba;      public variantepk() {         super();     }      //constructors, getters, setters, hashcode, equals... } 


Comments

Popular posts from this blog

.htaccess - First slash is removed after domain when entering a webpage in the browser -

Automatically create pages in phpfox -

c# - Farseer ContactListener is not working -