Fala galera… estou com uma pequena dificuldade na hora de inserir meu Cadastro de Clientes No banco.
Tenho a Classe Cliente… e Tenho a Classe Contato
Minha duvida… Ao clicar no gravar me aparece isso…
16957 [AWT-EventQueue-0] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1048, SQLState: 23000
16958 [AWT-EventQueue-0] ERROR org.hibernate.util.JDBCExceptionReporter - Column 'id_cliente' cannot be null
org.hibernate.exception.ConstraintViolationException: could not insert: [br.com.impacta.cliente.domain.model.Contato]
Sendo que Ja tenho a logica para salvar cliente e contato ao mesmo tempo.
package br.com.impacta.cliente.app.action.cliente;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import br.com.impacta.cliente.domain.model.Cliente;
import br.com.impacta.cliente.domain.model.Contato;
import br.com.impacta.cliente.domain.model.ContatoVO;
import br.com.impacta.cliente.domain.model.Endereco;
import br.com.impacta.cliente.domain.model.EnderecoVO;
public class ClienteOkAction implements ActionListener {
JTextField tf_nome, tf_sobrenome, tf_complemento, tf_cep;
JComboBox<Object> jcb_sexo;
JComboBox<Object> jcb_logradouro, jcb_bairro, jcb_municipio,
jcb_estato_civil;
JTextField tf_numero;
JComboBox<Object> jcb_contato;
JTextField tf_contato;
JComboBox<Object> jcb_tp_endereco;
JTable cl_table;
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.buildSessionFactory();
public ClienteOkAction(JTextField tf_nome, JTextField tf_sobrenome,
JTextField tf_cep, JTextField tf_complemento,
JComboBox<Object> jcb_sexo, JComboBox<Object> jcb_logradouro,
JComboBox<Object> jcb_bairro, JComboBox<Object> jcb_municipio,
JComboBox<Object> jcb_estato_civil, JComboBox<Object> jcb_contato,
JTextField tf_contato, JTextField tf_numero,
JComboBox<Object> jcb_tp_endereco, JTable cl_table) {
super();
this.tf_nome = tf_nome;
this.tf_sobrenome = tf_sobrenome;
this.tf_complemento = tf_complemento;
this.tf_cep = tf_cep;
this.jcb_sexo = jcb_sexo;
this.jcb_bairro = jcb_bairro;
this.jcb_logradouro = jcb_logradouro;
this.jcb_municipio = jcb_municipio;
this.jcb_estato_civil = jcb_estato_civil;
this.jcb_contato = jcb_contato;
this.tf_contato = tf_contato;
this.tf_numero = tf_numero;
this.jcb_tp_endereco = jcb_tp_endereco;
this.cl_table = cl_table;
}
@Override
public void actionPerformed(ActionEvent arg0) {
//Metodo para gravar No BANCO
OkAction();
}
public void OkAction() {
try {
//Abre a Sessao para gravar No banco
Session sessao = factory.openSession();
Transaction transa = sessao.beginTransaction();
// instancia a classe para setar Objetos a serem gravar
int id_cliente = 0;
Cliente cliente = new Cliente(id_cliente);
cliente.setId_cliente(id_cliente);
cliente.setNome(tf_nome.getText());
cliente.setSobrenome(tf_sobrenome.getText());
cliente.setSexo(jcb_sexo.getSelectedItem().toString());
cliente.setEstadocivil(jcb_estato_civil.getSelectedItem()
.toString());
cliente.setContatos(new Contato());
cliente.getContatos().setTipo((ContatoVO) jcb_contato.getSelectedItem());
cliente.getContatos().setValor(tf_contato.getText());
sessao.save(cliente);
transa.commit();
listatable();
sessao.close();
} catch (Exception cause) {
cause.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public void listatable() {
DefaultTableModel model = (DefaultTableModel) cl_table.getModel();
model.setNumRows(0);
Session sessao = factory.openSession();
List<Cliente> list_clientes = new ArrayList<Cliente>();
list_clientes = (List<Cliente>) sessao.createQuery("FROM Cliente")
.list();
int tamanho = list_clientes.size() ;
for (int i = 0; i < tamanho; i++) {
Cliente cliente = list_clientes.get(i);
model.addRow(new Object[] { cliente.getId_cliente(),cliente.getNome(),
cliente.getSobrenome(), cliente.getSexo(),
cliente.getContatos().getValor() });
}
}
}
meu hibernate.xml está configurado assim.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="br.com.impacta.cliente.domain.model">
<class name="Cliente" table="cliente">
<cache usage="read-only" />
<id name="id_cliente" column="id_cliente" type="integer">
<generator class="identity" />
</id>
<property name="nome" column="nm_cliente" type="string"></property>
<property name="sobrenome" column="sn_cliente" type="string"></property>
<property name="Sexo" column="id_sexo" type="string"></property>
<property name="Estadocivil" column="id_estado_civil" type="string"></property>
<many-to-one class="br.com.impacta.cliente.domain.model.Contato"
cascade="all" name="contatos"
column="id_contato"
foreign-key="fk_contato"
unique="true"
/>
</class>
<class name="Contato" table="contato">
<cache usage="read-only" />
<id name="id_contato" column="id_contato" type="integer">
<generator class="identity" />
</id>
<property name="valor" column="vl_contato" type="string"></property>
<property name="tipo" column="tp_contato" not-null="true">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">br.com.impacta.cliente.domain.model.ContatoVO</param>
<param name="">11</param>
</type>
</property>
<many-to-one class="br.com.impacta.cliente.domain.model.Cliente"
cascade="all" name="clientes"
column="id_cliente"
foreign-key="fk_cliente"
unique="true"
/>
</class>
</hibernate-mapping>
Onde estou errando ??? Fico no aguardo