Hibernate Annotations

Olá Pesssoal,
Estou usando:

  • Eclipse 3.2 WTP 1.5.4
  • Hibernate-3.2.4
  • Hibernate-annotations-3.3.0.GA
  • MySQL 5

Seguindo o exemplo da apostila da Caelum…

package br.com.caelum.hibernate;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.Entity;

@Entity
public class Produto {
	@Id
	@GeneratedValue
	private Long id;
	private String nome;
	@Column(name = "descricao", nullable = true, length = 50)
	private String descricao;
	private Double preco;
	
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Double getPreco() {
		return preco;
	}
	public void setPreco(Double preco) {
		this.preco = preco;
	}

}
package br.com.caelum.hibernate;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class GeraTabelas {
	
	public static void main(String[] args) {
//		 Cria uma configuração para a classe Produto
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Produto.class);
		new SchemaExport(cfg).create(true, true);
	}

}

hibernate.properties - está no src

hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class com.mysql.jdbc.Driver
hibernate.connection.url jdbc:mysql://localhost/teste
hibernate.connection.username root
hibernate.connection.password

No exemplo da apostila, diz que quando rodasse o GeraTabela o eclipse mostraria uma mensagem cobrando o arquivo de log:

[color=red]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.[/color]

e que depois mostraria o código sql que ele usou para criar a tabela.

Mas quando eu rodo o GeraTabela dá a mensagem acima, ou seja:

[color=red]log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.[/color]

Mas não aparece o sql usado para criar a tabela e nem mesmo cria uma tabela !!

Alguém sabe pq está dando esse problema ?

Obrigado !

ola!

importe o @Entity de javax.persistence e nao de org.hibernate

[]'s

Amigo,

No seu hibernate.properties esta descrito que o usuário do banco é root e a senha é vazia, ou seja, sem nada. O seu banco esta com este usuário e senha?
Eu também estou tentando seguir os exercícios da Caelum, porém desta parte eu passei, mas parei em outra!! :roll:
http://www.guj.com.br/posts/list/60386.java

Vamos tentar resolver e terminar esta apostila.

Abraço,
Wallfox

Acredito que pelo warn que esta dando, falta a lib do log4j e o arquivo de config do mesmo.

abços,

“MIKAS”

Você pode comecar configurando o log4j pra ver qual warning ele esta querendo logar.

Outra coisa… Pode ser viagem minha… No seu hibernate.properties nao deveria ter um sinal de igual separando chave e valor??

  • nao precisa do sinal de igual no properties
  • pode habilitar o log4j para erros melhores
  • mas o erro é no import mesmo :slight_smile:

[quote=sergiousp]ola!

importe o @Entity de javax.persistence e nao de org.hibernate

[]'s[/quote]

Vc tem razão !!!
O problema era o import

Eu poderia colocar a culpa no Ctrl + Shift + O do Eclipse, mas eu deveria ter reparado isso. hahhahahaha

Valeu galera !!

Obrigadão !!

Caros,
Estou tendo o mesmo erro, porém não eh o import…
Estou seguindo a apostila Hibernate com Anotações
Por: Raphaela Galhardo Fernandes e Gleydson de A. Ferreira Lima

----------------------------------------------------Aluno.java :

package teste;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
//Anotação que informa que a classe mapeada é persistente
@Entity
//Informando nome e esquema da tabela mapeada
@Table(name=“aluno”, schema=“anotacoes”)
public class Aluno {
//Definição da chave primária
@Id
//Definição do mecanismo de definição da chave primária
@GeneratedValue(strategy = GenerationType.SEQUENCE)
//Informa o nome da coluna mapeada para o atributo
@Column(name=“id_aluno”)
private int id;
private int matricula;
private String nome;
private long cpf;

//Construtor padrão
public Aluno(){}
//Métodos getters e setters
public long getCpf() { return cpf; }
public void setCpf(long cpf) { this.cpf = cpf; }
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public int getMatricula() { return matricula; }
public void setMatricula(int matricula) {
	this.matricula = matricula;
}
public String getNome() { return nome; }
public void setNome(String nome) { this.nome = nome; }

}

----------------------------------------------------Listagem12.java :

package teste;

import javax.persistence.RollbackException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class Listagem12 {
public static void main(String[] args) {
//Cria objeto que receberá as configurações
Configuration cfg = new AnnotationConfiguration();
//Informe o arquivo XML que contém a configurações
cfg.configure("/hibernate.cfg.xml"
);
//"/br/com/jeebrasil/hibernate/anotacoes/conf/hibernate.cfg.xml"
//Cria uma fábrica de sessões.
//Deve existir apenas uma instância na aplicação
SessionFactory sf = cfg.buildSessionFactory();
// Abre sessão com o Hibernate
Session session = sf.openSession();
//Cria uma transação
Transaction tx = (Transaction) session.beginTransaction();
// Cria objeto Aluno
Aluno aluno = new Aluno();
aluno.setNome(“Raphaela Galhardo Fernandes”);
aluno.setMatricula(200027803);
aluno.setCpf(1234567898);
session.save(aluno); // Realiza persistência
try {
tx.commit();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RollbackException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
session.close(); // Fecha sessão
}
}

----------------------------------------------------hibernate.cfg.xml :

<?xml version="1.0" encoding="utf-8"?>

com.mysql.jdbc.Driver
jdbc:mysql://localhost/jeebrasil
org.hibernate.dialect.MySQLDialect
true
jhtp6
jhtp6
10

Ta dando:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:147)
at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1405)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1427)
at teste.Listagem12.main(Listagem12.java:19)

valewwww

Oi gente,
na minha opinião, seria só configurar um Appender para a instância do log4j.
Pode até configurar o appender default, para loggar mensagens na console, assim:

BasicConfigurator.configure();

Se usar um appender (interface Appender), é assim:

Appender appender = new FileAppender([i]... parâmetros ...[/i]);
BasicConfigurator.configure(appender);

O warning do log4j se refere ao fato que não está achando appenders na configuração dele.

Enjoy