Foros del Web » Programación para mayores de 30 ;) » Java »

Hibernate llaves compuestas

Estas en el tema de Hibernate llaves compuestas en el foro de Java en Foros del Web. soy nuevo utilizando hibernate y ahorita me he encontrado con un problema: tengo una tabla con una llave compuesta usando dos campos, ahora quiero relacionar ...
  #1 (permalink)  
Antiguo 02/05/2011, 12:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 1
Antigüedad: 13 años
Puntos: 0
Hibernate llaves compuestas

soy nuevo utilizando hibernate y ahorita me he encontrado con un problema: tengo una tabla con una llave compuesta usando dos campos, ahora quiero relacionar esa tabla con otra pero al momento de insertar me lanza un error de violacion a la llave foranea, les dejos los datos exactos para mejor visualizacion:

El mapping generado por netbeans:

<hibernate-mapping>
<class name="iesmo.entity.Horarioclase" table="horarioclase" catalog="sira">
<id name="codigoHorarioClase" type="java.lang.Integer">
<column name="Codigo_HorarioClase" />
<generator class="identity" />
</id>
<many-to-one name="turnoDia" class="iesmo.entity.TurnoDia" fetch="select" lazy ="false">
<column name="Codigo_Turno" />
<column name="Codigo_Dia" />
</many-to-one>
<property name="horaInicio" type="time">
<column name="HoraInicio" length="8" />
</property>
<property name="horaFin" type="time">
<column name="HoraFin" length="8" />
</property>
<set name="horariogrupos" inverse="true">
<key>
<column name="Codigo_HorarioClase" not-null="true" />
</key>
<one-to-many class="iesmo.entity.Horariogrupo" />
</set>
</class>
</hibernate-mapping>

Tablas en la bd:

Turno : Codigo_Turno(PK), Nombre;
Dia: Codigo_Dia(PK); Nombre;
HorarioDia: Codigo_Turno(PK), Codigo_Dia(PK), HoraInicio, HoraFin;
HorarioClase: Codigo_HorarioClase(PK), Codigo_Turno, Codigo_Dia, HoraInicio, HoraFin;

Error generado:

05-02-2011 12:13:20 PM org.hibernate.util.JDBCExceptionReporter logExceptions
ADVERTENCIA: SQL Error: 1452, SQLState: 23000
05-02-2011 12:13:20 PM org.hibernate.util.JDBCExceptionReporter logExceptions
GRAVE: Cannot add or update a child row: a foreign key constraint fails (`sira`.`horarioclase`, CONSTRAINT `fkHoraTurno` FOREIGN KEY (`Codigo_Turno`, `Codigo_Dia`) REFERENCES `turno_dia` (`Codigo_Turno`, `Codigo_Dia`))
Exception in thread "AWT-EventQueue-0" org.hibernate.exception.ConstraintViolationExcepti on: could not insert: [iesmo.entity.Horarioclase]
at org.hibernate.exception.SQLStateConverter.convert( SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.conver t(JDBCExceptionHelper.java:43)
at org.hibernate.id.insert.AbstractReturningDelegate. performInsert(AbstractReturningDelegate.java:40)
at org.hibernate.persister.entity.AbstractEntityPersi ster.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersi ster.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.ex ecute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQue ue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener. performSaveOrReplicate(AbstractSaveEventListener.j ava:298)
at org.hibernate.event.def.AbstractSaveEventListener. performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener. saveWithGeneratedId(AbstractSaveEventListener.java :107)
at org.hibernate.event.def.DefaultSaveOrUpdateEventLi stener.saveWithGeneratedOrRequestedId(DefaultSaveO rUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.s aveWithGeneratedOrRequestedId(DefaultSaveEventList ener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventLi stener.entityIsTransient(DefaultSaveOrUpdateEventL istener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.p erformSaveOrUpdate(DefaultSaveEventListener.java:2 7)
at org.hibernate.event.def.DefaultSaveOrUpdateEventLi stener.onSaveOrUpdate(DefaultSaveOrUpdateEventList ener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImp l.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.ja va:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.ja va:519)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$Tr ansactionProtectionWrapper.invoke(ThreadLocalSessi onContext.java:301)
at $Proxy0.save(Unknown Source)
at iesmo.Repositorio.RepositorioHorarioClase.Guardar( RepositorioHorarioClase.java:41)
at iesmo.Repositorio.RepositorioHorarioClase.Guardar( RepositorioHorarioClase.java:20)
at iesmo.UI.FrmHorario.btnAgregarActionPerformed(FrmH orario.java:335)
at iesmo.UI.FrmHorario.access$300(FrmHorario.java:40)
at iesmo.UI.FrmHorario$4.actionPerformed(FrmHorario.j ava:209)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEven tMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.jav a:6263)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3255)
at java.awt.Component.processEvent(Component.java:602 8)
at java.awt.Container.processEvent(Container.java:204 1)
at java.awt.Component.dispatchEventImpl(Component.jav a:4630)
at java.awt.Container.dispatchEventImpl(Container.jav a:2099)
at java.awt.Component.dispatchEvent(Component.java:44 60)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:4168)
at java.awt.Container.dispatchEventImpl(Container.jav a:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475 )
at java.awt.Component.dispatchEvent(Component.java:44 60)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 599)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:122)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityCons traintViolationException: Cannot add or update a child row: a foreign key constraint fails (`sira`.`horarioclase`, CONSTRAINT `fkHoraTurno` FOREIGN KEY (`Codigo_Turno`, `Codigo_Dia`) REFERENCES `turno_dia` (`Codigo_Turno`, `Codigo_Dia`))
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:40 6)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLErro r.java:1015)
at com.mysql.jdbc.SQLError.createSQLException(SQLErro r.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:19 36)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionIm pl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(P reparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1922)
at org.hibernate.id.IdentityGenerator$GetGeneratedKey sDelegate.executeAndExtract(IdentityGenerator.java :73)
at org.hibernate.id.insert.AbstractReturningDelegate. performInsert(AbstractReturningDelegate.java:33)


Gracias de antemano por cualquier sugerencia/ayuda

Etiquetas: hibernate, llaves
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:38.