-- EDITADO --
Galera, fiz rodar, mais info abaixo
-------------------------------------------------
Botei o dialect e transformei a table para mysam, ai rodou...
Agora fica a pergunta, e se eu quisesse usar innodb?
-------------------------------------------------
Fala pessoal, tudo certo?
Estou tendo um problema um tanto quanto muito demais estranho... hehehehe
Seguinte, estou usando o hibernate 2.1, todos os libs no classpath, jar do hibernate no classpath tb.
Todas as classes (Amigos, DAO, e teste) estão compilando, porém, quando vou rodar o teste ele me mostra alguns erros e tchanam... quando eu abro o banco não tem NADA!!!
segue os arquivos.
Mal ae pelo plágio de alguns testes do pessoal, mas isso é somente para aprendizado.
arquivo DAO
public class AmigosDAO {
private SessionFactory factory;
public AmigosDAO() throws HibernateException{
Configuration cfg = new Configuration().addClass(Amigos.class);
factory = cfg.buildSessionFactory();
}
public void insert(Amigos amigo) throws Exception{
Session session = factory.openSession();
session.save(amigo);
session.flush();
session.close();
}
public java.util.List getList(String condicao) throws Exception{
Session session = factory.openSession();
List amigos = session.find(condicao);
session.flush();
session.close();
return amigos;
}
public Amigos retrieve(String pk) throws Exception{
Session session = factory.openSession();
Amigos amigo = (Amigos)session.load(Amigos.class, pk);
session.flush();
session.close();
return amigo;
}
public void delete(Amigos amigo) throws Exception{
Session session = factory.openSession();
session.delete(amigo);
session.flush();
session.close();
}
}
Arquivo Amigos
public class Amigos {
private String nome;
private String endereco;
private String telefone;
private String celular;
private String email;
private java.util.Date nascimento;
public Amigos(){
}
public Amigos(String nome, String endereco){
}
/**
* @return Returns the celular.
*/
public String getCelular() {
return celular;
}
/**
* @return Returns the email.
*/
public String getEmail() {
return email;
}
/**
* @return Returns the endereco.
*/
public String getEndereco() {
return endereco;
}
/**
* @return Returns the nascimento.
*/
public java.util.Date getNascimento() {
return nascimento;
}
/**
* @return Returns the nome.
*/
public String getNome() {
return nome;
}
/**
* @return Returns the telefone.
*/
public String getTelefone() {
return telefone;
}
/**
* @param celular The celular to set.
*/
public void setCelular(String celular) {
this.celular = celular;
}
/**
* @param email The email to set.
*/
public void setEmail(String email) {
this.email = email;
}
/**
* @param endereco The endereco to set.
*/
public void setEndereco(String endereco) {
this.endereco = endereco;
}
/**
* @param nascimento The nascimento to set.
*/
public void setNascimento(java.util.Date nascimento) {
this.nascimento = nascimento;
}
/**
* @param nome The nome to set.
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @param telefone The telefone to set.
*/
public void setTelefone(String telefone) {
this.telefone = telefone;
}
}
Uma curiosidade, ele fala que por default, o constructor tem que ser vazio, alguém sabe o motivo? E se eu coloco os dois, ele fala que os parametros tem que ser definidos manualmente.
Arquivo testeamigos
public class MeusAmigos {
public static void main(String[] args) {
System.out.println("===== Teste do hibernate =====");
System.out.println("");
try {
System.out.println("Inserindo um registro");
Amigos amigo1 = new Amigos();
Amigos amigo2 = new Amigos();
amigo1.setNome("eu");
amigo1.setEndereco("aqui");
amigo2.setNome("Ele");
amigo2.setEndereco("la");
// cadastra registros
AmigosDAO dao = new AmigosDAO();
dao.insert(amigo1);
dao.insert(amigo2);
// exibe registros
System.out.println("Exibindo registros [ " + amigo1.getNome() + " ]");
Amigos mostra = dao.retrieve(amigo1.getNome());
System.out.println("Nome lido: " + mostra.getNome() + " Endereco lido: " + mostra.getEndereco());
// atualiza registro
System.out.println("Atualizando um registro");
amigo1.setEndereco("Rua 21 de abril");
dao.insert(amigo1);
mostra = dao.retrieve(amigo2.getNome());
System.out.println("Nome lido: " + mostra.getNome() + " Endereco lido: " + mostra.getEndereco());
} catch (Exception e){
System.out.println("Erro: [ " + e.getMessage() + " ] ");
}
}
}
xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping.dtd">
<hibernate-mapping>
<class name="Amigos" table="amigos">
<id name="nome" column="nome" type="string">
<generator class="assigned"/>
</id>
<property name="endereco" type="string"/>
<property name="telefone" column="fone" type="string"/>
<property name="celular" column="cel" type="string"/>
<property name="email" type="string"/>
<property name="nascimento" type="date"/>
</class>
</hibernate-mapping>
properties
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost:3306/banco
hibernate.connection.username =
hibernate.connection.password =
e por fim a saida que eu estou tendo
===== Teste do hibernate =====
Inserindo um registro
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exibindo registros [ eu ]
Nome lido: eu Endereco lido: aqui
Atualizando um registro
Erro: [ could not insert: [Amigos#eu] ]
Alguém pode me ajudar?
Ele não deixa inserir um endereco atualizado no amigo eu... e por fim do banco não aparece absolutamente nada...
EDITADO
Ou melhor, porque ele não registra numa tabela InnoDB e soh em MySAM? mudei para MySAM e ele registrou os dados...
agora em InnoDB ele não registra!
Mas ele continua não inserindo depois do udpate, não atualiza o usuario.
DATABASE - MySQL 4.1