eu tenho uma tabela pessoa com um id que ele é serial, e tenho uma tabela aluno, que tem o id da tabela pessoa com chave estrangeira, sé que ao fazer a inserção dos dados na tabela pessoa, não estou conseguindo atribuir esse id gerado na tabela aluno
eu tenho uma tabela pessoa com um id que ele é serial, e tenho uma tabela aluno, que tem o id da tabela pessoa com chave estrangeira, sé que ao fazer a inserção dos dados na tabela pessoa, não estou conseguindo atribuir esse id gerado na tabela aluno
Esse é o erro que está dando, ele ta gerando id errado esse 602 é bem maior que o numero que está na sequencia
Internal Exception: org.postgresql.util.PSQLException: ERRO: inserção ou atualização em tabela "aluno" viola restrição de chave estrangeira "fk_aluno_7618"
Detalhe: Chave (pessoaid)=(602) não está presente na tabela "pessoa".
Error Code: 0
Call: INSERT INTO sispog.public.aluno (pessoaid, matricula, professorpessoaid) VALUES (?, ?, ?)
bind => [602, 42342, null]
Query: InsertObjectQuery(br.com.sisPog.Dao.Aluno[pessoaid=602])
14/10/2009 16:06:50 br.com.sisPog.Dao.server salvar
SEVERE: exception caught
javax.persistence.RollbackException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: inserção ou atualização em tabela "aluno" viola restrição de chave estrangeira "fk_aluno_7618"
Detalhe: Chave (pessoaid)=(602) não está presente na tabela "pessoa".
Error Code: 0
Call: INSERT INTO sispog.public.aluno (pessoaid, matricula, professorpessoaid) VALUES (?, ?, ?)
bind => [602, 42342, null]
Query: InsertObjectQuery(br.com.sisPog.Dao.Aluno[pessoaid=602])
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60)
at br.com.sisPog.Dao.server.salvar(server.java:43)
at br.com.sisPog.Dao.Pessoa.teste(Pessoa.java:315)
at br.com.sisPog.Dao.Pessoa.main(Pessoa.java:320)
Caused by: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERRO: inserção ou atualização em tabela "aluno" viola restrição de chave estrangeira "fk_aluno_7618"
Detalhe: Chave (pessoaid)=(602) não está presente na tabela "pessoa".
Error Code: 0
Call: INSERT INTO sispog.public.aluno (pessoaid, matricula, professorpessoaid) VALUES (?, ?, ?)
bind => [602, 42342, null]
Query: InsertObjectQuery(br.com.sisPog.Dao.Aluno[pessoaid=602])
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:311)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:654)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:703)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:492)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:452)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeCall(AbstractSession.java:690)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:214)
at oracle.toplink.essentials.internal.queryframework.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:346)
at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:191)
at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:205)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:564)
at oracle.toplink.essentials.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:89)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:750)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:714)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:602)
at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:162)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:390)
at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:109)
at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628)
at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:555)
at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:138)
at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:110)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909)
at oracle.toplink.essentials.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:269)
at oracle.toplink.essentials.internal.sessions.CommitManager.commitAllObjectsForClassWithChangeSet(CommitManager.java:246)
at oracle.toplink.essentials.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:202)
at oracle.toplink.essentials.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:2657)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1044)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:403)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:107)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:856)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:102)
... 4 more
Caused by: org.postgresql.util.PSQLException: ERRO: inserção ou atualização em tabela "aluno" viola restrição de chave estrangeira "fk_aluno_7618"
Detalhe: Chave (pessoaid)=(602) não está presente na tabela "pessoa".
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:304)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:647)
... 38 more
Exception in thread "main" java.lang.IllegalStateException:
Exception Description: No transaction is currently active
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.rollback(EntityTransactionImpl.java:140)
at br.com.sisPog.Dao.server.salvar(server.java:46)
at br.com.sisPog.Dao.Pessoa.teste(Pessoa.java:315)
at br.com.sisPog.Dao.Pessoa.main(Pessoa.java:320)
esse mapeamento não esta bom… como falei vc precisa pegar o ID de pessoaId, e não da sequencia, Aluno não tem geração de ID, o ID dela é um FK, e portanto não deve ser gerado pelo banco, e sim setado…
assim que vc deveria mapear… ai quando o valor em Pessoa for persistido o id aprece, e aluno tb consegue ser persistido…
como vc fez anteriormente, ele gerava o número de ID de pessoa, através do sequenciador, depois fazia o mesmo para o aluno resultando em 2 números diferentes