Olá Pessoal,
Tenho uma base de dados oracle com uma tabela/entidade PrismaBoxReserva.
Quando quero listar os registro desta tabela tudo ocorre bem.
Quando quero inserir uma linha não consigo.
Nota: eu não posso criar/atualizar colunas desta base de dados. Então crio minhas classes verificando nas tabelas quais os tipos e nomes de cada coluna.
Colunas da tabela
prisma ------------------------- varchar2(6) -- id not null
data_comeca ------------------ date -- id not null
data_termina ------------------ date ------------ null
motivo ------------------------- varchar2(50) -- null
crm_cod_empresa ------------ integer --------- null
crm_cod_evento -------------- integer --------- null
placa --------------------------- varchar2(8) --- null
Class PrismaBoxReserva (conversão de tabela para class/bean)
@Table(name="PRISMA_BOX_RESERVA", schema="NBS")
@Entity
public class PrismaBoxReserva implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private String prisma;
@Id
private Date data_comeca;
private Date data_termina;
@Column(columnDefinition="LONGTEXT")
private String motivo;
private Long crm_cod_empresa;
private Long crm_cod_evento;
private String placa;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="prisma", unique = false, nullable = false)
private PrismaBox prismaBox;
DAO (responsável por inserir o registro)
public ClienteEpico manterAgendamento(AgendamentoGravarClient agendamentoGravarClient) {
PrismaBoxReserva reserva = new PrismaBoxReserva();
reserva.setData_comeca( agendamentoGravarClient.getDataAgendar() );
reserva.setData_termina( agendamentoGravarClient.getDataAgendar() );
reserva.setPlaca( agendamentoGravarClient.getPlaca() );
reserva.setPrisma( agendamentoGravarClient.getPrisma() );
ClienteEpico clienteEpico = (ClienteEpico) sessionS.mysqlSession().get(ClienteEpico.class, agendamentoGravarClient.getId_clienteEpico());
reserva.setMotivo( "On Line: Sr(a) " + clienteEpico.getNome() );
try{
Transaction tx = sessionS.oracleSession().beginTransaction();
sessionS.oracleSession().persist( reserva );
tx.commit();
return clienteEpico;
}catch (Exception e) {
E.exToMsg(e, "Erro na tentativa de manter gravar um agendamento on line.");
e.printStackTrace();
return null;
}
}
ERRO
Hibernate: insert into NBS.PRISMA_BOX_RESERVA (crm_cod_empresa, crm_cod_evento, data_termina, motivo, placa, prisma, data_comeca) values (?, ?, ?, ?, ?, ?, ?)
[27/52/2012 11:52] WARN [http-bio-8080-exec-4] (JDBCExceptionReporter.java:233) - SQL Error: 17003, SQLState: null
[27/52/2012 11:52] ERROR [http-bio-8080-exec-4] (JDBCExceptionReporter.java:234) - Índice de coluna inválido
[27/52/2012 11:52] ERROR [http-bio-8080-exec-4] (AbstractFlushingEventListener.java:324) - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not insert: [br.com.brabus.epico.model.agendamento.PrismaBoxReserva]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2454)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2874)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at br.com.brabus.epico.rest.dao.AgendamentoServiceDAO.manterAgendamento(AgendamentoServiceDAO.java:122)
...
Caused by: java.sql.SQLException: Índice de coluna inválido
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.OraclePreparedStatement.setTimestampInternal(OraclePreparedStatement.java:7660)
at oracle.jdbc.driver.OraclePreparedStatement.setTimestamp(OraclePreparedStatement.java:7634)
... 65 more
Qualquer ajuda é muito bem vinda.
Abraços,
Jsign