RESOLVIDO Hibernation 4 Annotation com XML?

Salve família!

Pessoas, to com uma dúvida osso duro de ser sanada.
Pelo o que eu aprendi se colocarmos a anotação @Entity do javax.persistence na classe isso indica que a mesma é uma tabela. Pelo que eu entendi ela seria mapeada automaticamente, sem a necessidade de mapea-la no hibernate.cfg.xml. Mas na prática não está acontecendo! Segue abaixo alguns trechos de códigos:

OBS: É um projeto WEB e uso JSF com hibernate 4.

A classe abaixo, é chamada por um filtro que pega a session que essa classe abaixo abre e pendura no request, para que os managedBeans utilize.

public class HibernateUtil {
	
	protected static SessionFactory factory;
	protected static Session session;
	protected static Configuration cfg = new Configuration().configure();
	
	public HibernateUtil() {
		cfg.addAnnotatedClass(AlunoTb.class);
		cfg.addAnnotatedClass(AlunoFotosTb.class);
		cfg.addAnnotatedClass(UsuarioTb.class);
		cfg.addAnnotatedClass(AutorizacaoTb.class);
		cfg.addAnnotatedClass(AlunoAnotacoesTb.class);
		cfg.addAnnotatedClass(IdentificacaoAlunoTb.class);
	}

	@SuppressWarnings("deprecation") //Sei que o buildSessionFactory está depreciado, mas não posso me dar ao luxo de aprender a outra forma. Por enquanto
	public static Session getSession(){
		factory = cfg.buildSessionFactory();
		session = factory.openSession();
		return session;
	}

}

Hibernate CFG:

<!DOCTYPE hibernate-configuration PUBLIC  
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  
<hibernate-configuration>  
   <session-factory>     
      <property name="hibernate.connection.username">postgres</property>  
      <property name="hibernate.connection.password">123</property>  
      <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/uniSocial</property>  
      <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>  
      <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
      <property name="hibernate.current_session_context_class">thread</property>
      <property name="hibernate.show_sql">false</property>
      <property name="hibernate.format_sql">true</property>
      
      <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
      <property name="hibernate.c3p0.min_size">5</property>
      <property name="hibernate.c3p0.max_size">20</property>
      <property name="hibernate.c3p0.timeout">30</property>
      <property name="hibernate.c3p0.idle_test_period">20</property>
      <property name="hibernate.c3p0.max_statements">3</property>
         
      <mapping class="br.com.van.hibernate.tabelas.AlunoTb"/>  
      <mapping class="br.com.van.hibernate.tabelas.AlunoFotosTb"/>
      <mapping class="br.com.van.hibernate.tabelas.AlunoAnotacoesTb"/>
      <mapping class="br.com.van.hibernate.tabelas.IdentificacaoAlunoTb"/>
      <mapping class="br.com.van.springSecurity.model.UsuarioTb"/>
      <mapping class="br.com.van.springSecurity.model.AutorizacaoTb"/>       
   </session-factory>  
</hibernate-configuration> 	

Uma das tabelas:

package br.com.van.hibernate.tabelas;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class IdentificacaoAlunoTb implements Serializable{	
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long idIdentificacaoAluno;
	private Long raIdentificacaoAluno;
	private String primeiroNomeIdentificacaoAluno;
	private String ultimoNomeIdentificacaoAluno;
	private Integer idadeIdentificacaoAluno;
	private String sexoIdentificacaoAluno;
	private String senhaCentralAlunoIdentificacaoAluno;
	
	//getters e setter
	public void setIdIdentificacaoAluno(Long id) {
		this.idIdentificacaoAluno = id;
	}
	public Long getIdIdentificacaoAluno() {
		return this.idIdentificacaoAluno;
	}
	
	public void setRaIdentificacaoAluno(Long ra) {
		this.raIdentificacaoAluno = ra;
	}
	public Long getRaIdentificacaoAluno() {
		return this.raIdentificacaoAluno;
	}
	
	public void setPrimeiroNomeIdentificacaoAluno(String primeiroNome) { 
		this.primeiroNomeIdentificacaoAluno = primeiroNome;
	}
	public String getPrimeiroNomeIdentificacaoAluno() {
		return this.primeiroNomeIdentificacaoAluno;
	}
	
	public void setUltimoNomeIdentificacaoAluno(String ultimoNome) {
		this.ultimoNomeIdentificacaoAluno = ultimoNome;
	}
	public String getUltimoNomeIdentificacaoAluno() {
		return this.ultimoNomeIdentificacaoAluno;
	}
	
	public void setIdadeIdentificacaoAluno(Integer idade) {
		this.idadeIdentificacaoAluno = idade;
	}
	public Integer getIdadeIdentificacaoAluno() {
		return this.idadeIdentificacaoAluno;
	}
	
	public void setSexoIdentificacaoAluno(String sexo) {
		this.sexoIdentificacaoAluno = sexo;
	}
	public String getSexoIdentificacaoAluno() {
		return this.sexoIdentificacaoAluno;
	}
	
	public void setSenhaCentralAlunoIdentificacaoAluno(String senhaCentralAluno) {
		this.senhaCentralAlunoIdentificacaoAluno = senhaCentralAluno;
	}
	public String getSenhaCentralAlunoIdentificacaoAluno() {
		return this.senhaCentralAlunoIdentificacaoAluno;
	}
}

Qualquer dica ou solução fornecida será bem vinda! lol

Eu usaria o padrão JPA “Persistence.xml” e não “Hibernate CFG”, e no “Persistence.xml” você define que vai usar o Hibernate como implementação do JPA.

I didn’t get it =/

Vou te da uma colher de chá:

public class HibernateUtil {  
      
    public static SessionFactory factory;  
      
    static {  
        Configuration cfg = new Configuration();
        cfg.addAnnotatedClass(AlunoTb.class);  
        cfg.addAnnotatedClass(AlunoFotosTb.class);  
        cfg.addAnnotatedClass(UsuarioTb.class);  
        cfg.addAnnotatedClass(AutorizacaoTb.class);  
        cfg.addAnnotatedClass(AlunoAnotacoesTb.class);  
        cfg.addAnnotatedClass(IdentificacaoAlunoTb.class); 
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 
        factory = cfg.buildSessionFactory(serviceRegistry );
    }  
  
    
    public static Session getSession(){  
        return factory.openSession();
    }  
  
}  

Isso ae é a nova forma de iniciar o hibernate, voce agora pode eliminar os seus HBMs e o hibernate.cfg.xml, ao inves disso cria o arquivo hibernate.properties, na pasta principal do seu projeto, e la ponha so isso:

hibernate.connection.username = postgres   
hibernate.connection.password = 123    
hibernate.connection.url = jdbc:postgresql://localhost:5432/uniSocial   
hibernate.connection.driver_class = org.postgresql.Driver 
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect  
hibernate.current_session_context_class = thread  
hibernate.show_sql = false  
hibernate.format_sql = true

Boa Sorte!

E ai Blz!!!

Então, até onde sei o que o Hibernate faz automaticamente e criar suas tabelas em um Banco de dados utilizando a anotação abaixo em seu Hibernate CFG:

&lt;property name="hibernate.hbm2ddl.auto"&gt;update&lt;/property&gt;

Com relação ao @Entity é isso mesmo que vc citou, porém vc tem que mapear as tabelas manualmente no seu Hibernate CFG, agora se o hibernate já faz isso automaticamente eu desconheço!!!

aprendizweb, tem essa forma que voce citou sim, porém uma forma mais prática, e que o mano ai ta com a duvida, é que nao precisa realmente mapear em lugar nenhum, as propria anotacoes cuidam disso pra voce. Eu uso assim.

Esse codigo que substitui as anotacoes manuais nos arquivos de configuracao do hibernate:

cfg.addAnnotatedClass(AlunoTb.class); 

[quote=rof20004]Vou te da uma colher de chá:

public class HibernateUtil {  
      
    public static SessionFactory factory;  
      
    static {  
        Configuration cfg = new Configuration();
        cfg.addAnnotatedClass(AlunoTb.class);  
        cfg.addAnnotatedClass(AlunoFotosTb.class);  
        cfg.addAnnotatedClass(UsuarioTb.class);  
        cfg.addAnnotatedClass(AutorizacaoTb.class);  
        cfg.addAnnotatedClass(AlunoAnotacoesTb.class);  
        cfg.addAnnotatedClass(IdentificacaoAlunoTb.class); 
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 
        factory = cfg.buildSessionFactory(serviceRegistry );
    }  
  
    
    public static Session getSession(){  
        return factory.openSession();
    }  
  
}  

Isso ae é a nova forma de iniciar o hibernate, voce agora pode eliminar os seus HBMs e o hibernate.cfg.xml, ao inves disso cria o arquivo hibernate.properties, na pasta principal do seu projeto, e la ponha so isso:

hibernate.connection.username = postgres   
hibernate.connection.password = 123    
hibernate.connection.url = jdbc:postgresql://localhost:5432/uniSocial   
hibernate.connection.driver_class = org.postgresql.Driver 
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect  
hibernate.current_session_context_class = thread  
hibernate.show_sql = false  
hibernate.format_sql = true

Boa Sorte![/quote]

Cara quanto a dúvida do mapeamento das classes funfou! Mas agora o pool de conexões do C3P0 parou de funcionar =/ … sabe me dizer por que?

Sei nao, mas nunca usei isso

hibernate.current_session_context_class = thread 

Sera que é isso ? nao né ‘-’

Eu uso o C3P0 e funciona normalmente.

[quote=rof20004]Sei nao, mas nunca usei isso

hibernate.current_session_context_class = thread 

Sera que é isso ? nao né ‘-’

Eu uso o C3P0 e funciona normalmente.[/quote]
Ifelizmente não. =[ … Até tirei nem to usando mais isso. Cara tem como você me passar o seu hibernateUtil (ou qualquer pessoa que possa fazer isso) pra eu dar uma olhada? Me passa no email por favor, o email é assis.vanderson@gmail.com … VALEU!!

O que eu te passei é como esta exatamento no meu HibernateUtil, so nao uso as mesmas classes que voce e nao mostrei os imports. Acho que nao tem erro, e isso nao deveria interferir no C3P0.

Po cara, acho que você digitou o email errado, porque não recebi a parada.

Confere aew por favor, o email é assis.vanderson@gmail.com … é GMAIL e não hotmail ta.

Inté!

Nao mandei nada para o seu e-mail, nao estou em casa =D.

A cara foi mal hehehe … é que eu tinha pedido pra você passar no email, mas não achei que o seu fosse igual ao que você ja postou aqui. Então beleza, valeu cara!

Finalmente resolvi o problema!!
Para futuras dúvidas do pessoal ae. O problema era que eu estava injetando as sessions nos DAOs pelos managedBeans. O que fiz foi, passar o trabalho de abrir e fechar sessions para os DAOs! Quanto à classe hibernateUtil ficou igualsinha a postada pelo rof20004 .

Valeu a todos e finalmente dúvida SANADA!!! lol … agora toma uma cachaça pra comemorar, hehe zueira.