Configuração Hibernate Criteria + JPA + EJB3

8 respostas
K

Uma dúvida.

Para usar o Criteria do Hibernate sempre vou precisar ter o arquivo class.hbm.xml referente a classe persistente ou um hibernate.cfg.xml?
Estou utilizando JPA e configuro os property no persistence.xml.

@Entity
@Table(name="aluno")
public class Aluno implements Serializable {
	private static final long serialVersionUID = 7246556345961734317L;
	
	@Id
	@GeneratedValue(strategy=IDENTITY)
	private int id;
	private String nome;
	private String cpf;
	private String email;
	private String telefone;

        //get/set
}
public class FindAluno {
	public static void main(String[] args) {
		
		AnnotationConfiguration configuration = new AnnotationConfiguration();
		configuration.addAnnotatedClass(app.matriculas.model.Aluno.class);
		configuration.configure();
		
		SessionFactory sf = configuration.buildSessionFactory();
		Session secao = sf.openSession();
		Criteria c = secao.createCriteria(Aluno.class);
		List<Aluno> listaAlunos = c.list();	
		
	}

}

Se executar o método acima ele acusa a falta do arquivo de configuração do Hibernate:

[list]Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found[/list]

Tem como contornar isso sem preciar configurar outros arquivos xml?

8 Respostas

Jair_Rillo_Junior

O Critéria não pertence a especificação JPA. Se você quer usar o Criteria, você não deve usar o Hibernate Entity Manager.
Portanto, esqueça o persistence.xml e trabalhe apenas com o hibernate.cfg.xml.

Sobre os hbm.xml, use o Hibernate-core para mapear as entidades através de annotations.

K

O Critéria não pertence a especificação JPA. Se você quer usar o Criteria, você não deve usar o Hibernate Entity Manager.
Portanto, esqueça o persistence.xml e trabalhe apenas com o hibernate.cfg.xml.

Sobre os hbm.xml, use o Hibernate-core para mapear as entidades através de annotations.

Mas é negócio somente utilizar o JPA ou poderia usar também o Criteria?

Jair_Rillo_Junior

A especificação JPA não implementa o Criteria, portanto, se você quer usar Criteria, você não irá usar a especificação JPA.

Eu gosto muito do JPA quando estamos trabalhando em um ambiente JEE (usando EJB3 e cia), caso contrário, eu optaria pelo Hibernate (é o meu caso no projeto atual).

K

Pois é Jair, na verdade estou estudando essas tecnologias pq me encarregaram de verificar isso para um projeto que vai ser feito em ambiente JEE com EJB3 (provavelmente com Glassfish já que o JBoss atual não dá suporte a algumas facilidades do EJB3), mas me passaram uma arquitetura com EJB + JPA + Hibernate + JSF.
É viável?

Jair_Rillo_Junior

quando se fala JPA + Hibernate, a idéia é usar a especificaçao JPA mas usando a implementação do Hibernate. Nesse caso você NÃO TERÁ O CRITERIA.

No GUJ já foi bastante discutido a diferença do JPA e Hibernate (core).

K

Hum…
Agora entendi Jair.
Mas tudo o que se faz com JPA (Hibernate como provedor) é possível com Critéria e vice-versa?
Há alguma vantagem de alguma das partes?
Li em alguns blogs que a próxima spec do JPA incluirá o Criteria.

Jair_Rillo_Junior

Você usa o que a especificaçao JPA te oferece, não importa o provider (seja Hibernate, OpenJPA, Toplink).

O Criteria é algo que pertence apenas o Hibernate-core (não a especificação). Ela é usada para fazer busca ao banco de dados de uma forma mais clara.
A especificação atual da JPA não tem criteria.

Como dito anteriormente, a vantagem do criteria é que você faz buscas no banco de uma forma mais clara. O hibernate possui outras vantagens também, dê uma pesquisada no fórum que esse assunto já foi discutido

K

vlw

Criado 19 de novembro de 2008
Ultima resposta 19 de nov. de 2008
Respostas 8
Participantes 2