java - JPA shared column on composite foreign key with null values -


i working eclipselink 2.6 , have entity:

@entity @table(name="espacioacademico") @namedquery(name="entityespacioacademico.findall", query="select e entityespacioacademico e") public class entityespacioacademico implements serializable {      @id     @sequencegenerator(name="espacioacademico_kidespacioacademico_generator", sequencename = "sec_espacioacademico", allocationsize = 1 )     @generatedvalue(strategy=generationtype.sequence, generator="espacioacademico_kidespacioacademico_generator")     @column(name="k_idespacioacademico")     private long kidespacioacademico;      //bi-directional one-to-one association entityfranjadocente     @onetoone     @joincolumns({         @joincolumn(name="k_iddocente", referencedcolumnname="k_iddocente"),         @joincolumn(name="k_idfranja", referencedcolumnname="k_idfranja", updatable = false, insertable = false)         })     private entityfranjadocente franjadocente;      //bi-directional one-to-one association entityfranjasalon     @onetoone     @joincolumns({         @joincolumn(name="k_idfranja", referencedcolumnname="k_idfranja"),         @joincolumn(name="k_idsalon", referencedcolumnname="k_idsalon")         })     private entityfranjasalon franjasalon; 

as can see column k_idfranja shared on 2 relationships.the database model allow null values on columns k_iddocente, k_idfranja , k_idsalon on table espacioacademico, logically primary keys on franjadocente , franjasalon can not null.

with mapping error when k_idsalon null:

[el info]: server: 2015-04-27 20:09:48.872--serversession(26114104)--detected server platform: org.eclipse.persistence.platform.server.noserverplatform. [el info]: server: 2015-04-27 20:09:51.123--serversession(26114104)--detected server platform: org.eclipse.persistence.platform.server.noserverplatform. [el info]: 2015-04-27 20:09:52.972--serversession(26114104)--eclipselink, version: eclipse persistence services - 2.6.0.v20150309-bf26070 [el info]: connection: 2015-04-27 20:09:54.153--serversession(26114104)--/file:/d:/programas/eclipse/workspace/tsis/bin/_tsis login successful [el warning]: 2015-04-27 20:09:55.729--serversession(26114104)--java.lang.nullpointerexception [el warning]: 2015-04-27 20:09:55.73--unitofwork(9881895)--java.lang.nullpointerexception javax.persistence.persistenceexception: java.lang.nullpointerexception @ org.eclipse.persistence.internal.jpa.queryimpl.getresultlist(queryimpl.java:484) @ co.ud.tsis.logica.persistencia.jpa.entities.controladores.espacioacademicojpacontroller.findespacioacademicoentities(espacioacademicojpacontroller.java:269) @ co.ud.tsis.logica.persistencia.jpa.entities.controladores.espacioacademicojpacontroller.findespacioacademicoentities(espacioacademicojpacontroller.java:235) @ co.ud.tsis.logica.persistencia.jpa.entities.controladores.espacioacademicojpacontroller.main(espacioacademicojpacontroller.java:443) caused by: java.lang.nullpointerexception @ org.eclipse.persistence.queries.readobjectquery.executeobjectlevelreadquery(readobjectquery.java:452) @ org.eclipse.persistence.queries.objectlevelreadquery.executedatabasequery(objectlevelreadquery.java:1173) @ org.eclipse.persistence.queries.databasequery.execute(databasequery.java:904) @ org.eclipse.persistence.queries.objectlevelreadquery.execute(objectlevelreadquery.java:1132) @ org.eclipse.persistence.queries.readobjectquery.execute(readobjectquery.java:425) @ org.eclipse.persistence.internal.sessions.abstractsession.internalexecutequery(abstractsession.java:3267) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1857) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1839) @ org.eclipse.persistence.internal.indirection.noindirectionpolicy.valuefromquery(noindirectionpolicy.java:326) @ org.eclipse.persistence.mappings.foreignreferencemapping.valuefromrowinternal(foreignreferencemapping.java:2328) @ org.eclipse.persistence.mappings.onetoonemapping.valuefromrowinternal(onetoonemapping.java:1848) @ org.eclipse.persistence.mappings.foreignreferencemapping.valuefromrow(foreignreferencemapping.java:2178) @ org.eclipse.persistence.mappings.foreignreferencemapping.readfromrowintoobject(foreignreferencemapping.java:1505) @ org.eclipse.persistence.internal.descriptors.objectbuilder.buildattributesintoobject(objectbuilder.java:462) @ org.eclipse.persistence.internal.descriptors.objectbuilder.buildobject(objectbuilder.java:1005) @ org.eclipse.persistence.internal.descriptors.objectbuilder.buildworkingcopyclonenormally(objectbuilder.java:899) @ org.eclipse.persistence.internal.descriptors.objectbuilder.buildobjectinunitofwork(objectbuilder.java:852) @ org.eclipse.persistence.internal.descriptors.objectbuilder.buildobject(objectbuilder.java:735) @ org.eclipse.persistence.internal.descriptors.objectbuilder.buildobject(objectbuilder.java:689) @ org.eclipse.persistence.queries.objectlevelreadquery.buildobject(objectlevelreadquery.java:803) @ org.eclipse.persistence.queries.readallquery.registerresultinunitofwork(readallquery.java:944) @ org.eclipse.persistence.queries.readallquery.executeobjectlevelreadquery(readallquery.java:555) @ org.eclipse.persistence.queries.objectlevelreadquery.executedatabasequery(objectlevelreadquery.java:1173) @ org.eclipse.persistence.queries.databasequery.execute(databasequery.java:904) @ org.eclipse.persistence.queries.objectlevelreadquery.execute(objectlevelreadquery.java:1132) @ org.eclipse.persistence.queries.readallquery.execute(readallquery.java:442) @ org.eclipse.persistence.queries.objectlevelreadquery.executeinunitofwork(objectlevelreadquery.java:1220) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.internalexecutequery(unitofworkimpl.java:2896) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1857) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1839) @ org.eclipse.persistence.internal.sessions.abstractsession.executequery(abstractsession.java:1804) @ org.eclipse.persistence.internal.jpa.queryimpl.executereadquery(queryimpl.java:258) @ org.eclipse.persistence.internal.jpa.queryimpl.getresultlist(queryimpl.java:473) ... 3 more

the code retrieve enities that:

 private list<entityespacioacademico> findespacioacademicoentities(boolean all, int maxresults, int firstresult) {     entitymanager em = getentitymanager();     try {         criteriaquery<entityespacioacademico> cq = em.getcriteriabuilder().createquery(entityespacioacademico.class);         cq.select(cq.from(entityespacioacademico.class));         typedquery<entityespacioacademico> q = em.createquery(cq);         if (!all) {             q.setmaxresults(maxresults);             q.setfirstresult(firstresult);         }         return q.getresultlist();     } {         em.close();     } } 

ps: model timetabling problem. franja time slot, docente teacher , salon room. franjadocente represents time slots when teacher available, , in same way, franjasalon represents time slots when room available. espacioacademico represents assignment, example: "jhon doe @ 6:00 a.m. -8:00 a.m. on room linear progamming". records on espacioacademico created algorithm, , due data, maybe have partially assignment (time slot null, teacher null or room null). on oracle database, in table espacioacademico, have composite foreign key franjadocente's primary key , franjasalon's primary key, allow null values on franja, docente or salon column (in espacioacademico table). in franjadocente or franjasalon not allowed. aim of foreign key prevent can create assignment on time slot when teacher, or room, not available.

my question ¿how can map relationships if join column can null? ¿should change join column approach?¿can map @transformation annotation?


Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -