boa tarde amigos
tenho um banco de dados com uma tabela paciente e outra consulta
um paciente pode realizar várias consultas. usando hibernate consigo persistir normalmente para a tabela paciente, mas quando tento persistir
para a tabela consulta, ocorrre uma erro
aqui está o código para persisttir o objeto consulta:
public class ConsultaDAO {
public void marcarConsulta(String cpf, String data, String hora,
String situacao) {
Consulta consulta = new Consulta();
consulta.setData(data);
consulta.setHora(hora);
consulta.setSituacao(situacao);
Paciente paciente = new Paciente();
paciente.setCpf("123456");
paciente.setNome(" ");
paciente.setEndereco(" ");
paciente.setTelefone(" ");
consulta.setPaciente(paciente);
Session sessao=HibernateUtil.getSessao();
Transaction tx=sessao.beginTransaction();
sessao.save(consulta);
tx.commit();
sessao.flush();
sessao.close();
}
}
nesse método eu crio objeto paciente e seto ele com seu cpf, que no modelo relacional será chave estrangeira da tabela Consulta, mas só que que esse paciente já está no banco. será que é isso que eu estou errando. será que eu tenho que retorna esse paciente do banco para depois setar ele no objeto consulta.
o erro que ocorre é o seguinte:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
dao.ConsultaDAO.marcarConsulta(ConsultaDAO.java:31)
controle.MarcarConsulta.doPost(MarcarConsulta.java:25)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
o meu Consulta.hbm.xml é o seguinte:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 16/05/2007 11:54:46 by Hibernate Tools 3.2.0.b9 -->
<hibernate-mapping>
<class name="modelo.Consulta" table="consulta" schema="public">
<id name="codcons" type="int">
<column name="codcons" />
<generator class="increment" />
</id>
<many-to-one name="paciente" class="modelo.Paciente" fetch="select" >
<column name="cpf" length="14" not-null="true" />
</many-to-one>
<property name="data" type="string">
<column name="data" length="10" not-null="true" />
</property>
<property name="hora" type="string">
<column name="hora" length="8" not-null="true" />
</property>
<property name="situacao" type="string">
<column name="situacao" length="15" />
</property>
<set name="procedimentosrealizadoses" inverse="true">
<key>
<column name="codcons" not-null="true" />
</key>
<one-to-many class="modelo.Procedimentosrealizados" />
</set>
<set name="receitas" inverse="true">
<key>
<column name="codcons" not-null="true" />
</key>
<one-to-many class="modelo.Receita" />
</set>
</class>
</hibernate-mapping>