[Resolvido] VRaptor3 + Hibernate  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

Olá pessoal.

Anotei minhas classes, coloquei o Hibernate como provider no web.xml para o VRaptor fazer a gerência de conexão com o BD, coloquei o CFG nas classes, mas as mesmas não estão sendo mapeadas. Ai quando tento salvar usando meu deu levo uma exceção de que minha classe não está sendo mapeada. Falta alguma configuração?

This message was edited 3 times. Last update was at 17/02/2010 23:47:27


Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

Ola Renzo!

Pode postar seu web.xml, seu hibernate.cfg.xml e a stack inteira da exception?

abracos!

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Lembre de sempre mapear a entidade com as anotações do javax.persistente.Entity. Se você mapear uma classe com @Entity do hibernate ela não será achada. Você precisa sempre usar o @Entity do jpa. Obvio que você pode usar ambas anotações, porém pelo menos a anotação do jpa precisa ter.

Além disso, você está usando JPA (via persistence.xml) ou Hibernate direto? O Hibernate não faz scan das classes automatico, já quando você usa JPA, mesmo que com o hibernate como backend, ele faz scan.

Abraços
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

garcia-jj wrote:Lembre de sempre mapear a entidade com as anotações do javax.persistente.Entity. Se você mapear uma classe com @Entity do hibernate ela não será achada. Você precisa sempre usar o @Entity do jpa. Obvio que você pode usar ambas anotações, porém pelo menos a anotação do jpa precisa ter.

Além disso, você está usando JPA (via persistence.xml) ou Hibernate direto? O Hibernate não faz scan das classes automatico, já quando você usa JPA, mesmo que com o hibernate como backend, ele faz scan.

Abraços


garcia-jj sempre ajudando o calouro aki. Então, não sabia que o Hibnernate puro não encontrava as classes anotadas automaticamente, bem que eu tinha desconfiado, já que no log elas não apareciam, diferentemente de qdo eu usava JPA. Mas o fato que eu queria a usar a Session em vez do EntityManger, para poder usar o Criteria. Tem como eu usar o JPA com persistence.xml e ainda assim pedir pro VRaptor me dar a Session? Ou será que tem outra maneira de acessar o Criteria que não pela Session?


Obrigado pela ajuda.
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

Paulo Silveira wrote:Ola Renzo!

Pode postar seu web.xml, seu hibernate.cfg.xml e a stack inteira da exception?

abracos!


Obrigado Paulo, mas foi justamente o que o garcia-jj colocou. Segui o tutorial e coloquei o hibernate.cfg.xml, mas ele não mapeou automaticamente as classes anotadas. Então, agora minha dúvida é que eu quero mapeamento automático, por isso vou usar JPA com o persistence.xml. mas queria que o VRaptor injetasse a Session do Hibernate em vez do Criteria, vc sabe como faço isso? Além disso, onde eu colocaria meu generate dll =true para o meu banco ser gerado automaticamente?

Obrigado pela ajuda galera.

Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Renzo, você pode usar JPA via entity-manager normalmente e usar criteria. Há três formas:

1) Você pode usar o JPA2 que já possui criteria. Ela é bem mais complicadinha que o Criteria do Hibernate, mas é muito poderosa.

2) Você pode chamar EntityManager.getDelegate() que é retornado, se não me engano, a session do Hibernate. Ai você pode usar Criteria sem problemas. Só não lembro se getDelegate retorna Session ou outro objeto do Hibernate (talvez um HibernateEntityManager, não lembro).

3) Usar um projeto que te forneça criteria em ambiente JPA. Havia um projeto no google code que fazia isso, porém perdi o link.

Mas se você quer usar Hibernate puro você precisa apenas criar um hibernate.cfg.xml (no site do hibernate explica sobre ele), e nele indicar o dialect, conexão, classes usadas, etc. A diferença é que você precisa declarar as classes, ao contrário do JPA. O vraptor pode te injetar a session assim como ele faz com o entity-manager. Basta você dar uma olhada na documentação sobre utilitários do vraptor que mostra como declarar a fábrica de session do hibernate no vraptor.

Abraços
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

garcia-jj wrote:Renzo, você pode usar JPA via entity-manager normalmente e usar criteria. Há três formas:

1) Você pode usar o JPA2 que já possui criteria. Ela é bem mais complicadinha que o Criteria do Hibernate, mas é muito poderosa.

2) Você pode chamar EntityManager.getDelegate() que é retornado, se não me engano, a session do Hibernate. Ai você pode usar Criteria sem problemas. Só não lembro se getDelegate retorna Session ou outro objeto do Hibernate (talvez um HibernateEntityManager, não lembro).

3) Usar um projeto que te forneça criteria em ambiente JPA. Havia um projeto no google code que fazia isso, porém perdi o link.

Mas se você quer usar Hibernate puro você precisa apenas criar um hibernate.cfg.xml (no site do hibernate explica sobre ele), e nele indicar o dialect, conexão, classes usadas, etc. A diferença é que você precisa declarar as classes, ao contrário do JPA. O vraptor pode te injetar a session assim como ele faz com o entity-manager. Basta você dar uma olhada na documentação sobre utilitários do vraptor que mostra como declarar a fábrica de session do hibernate no vraptor.

Abraços


Caramba, me respondeu quase na velocidade de um chat . Bom, eu realmente vou tentar a opção 2, me parece a mais adequada. A 3 para mim é a pior, ter que ficar mapeando classes no xml ngm merece. Se tem como do entityManager chegar no Criteria, então é o que estava querendo.

Mais uma vez, muito obrigado pela ajuda.
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Renzo, às ordens

Além disso, onde eu colocaria meu generate dll =true para o meu banco ser gerado automaticamente?


No seu persistence.xml, abaixo da tag persistence-unit você pode usar uma properties, e logo após um property. Então basta adicionar a property abaixo. O valor update indica que irá atualizar a estrutura da base de dados. Tem outros valores como drop-create que limpa a base e cria tudo de novo.



Mais propriedades aqui: http://docs.jboss.org/hibernate/stable/core/reference/en/html/session-configuration.html
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

Eu mais uma vez enchendo o saco...hehe.

Mudei para o JPA, mas aparentemente ele não consegue injetar o entityManager,

meu persistence.xml:


Meu web.xml:


Stack Trace:




Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

Esqueci de dizer, coloquei o persistence.xml exatamente onde estava o hibernate.cfg

Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Renzo, o persistence.xml deve estar dentro de um pacote META-INF. Caso você estiver usando EJB deve ficar dentro do seu módulo ejb dentro do /src/META-INF/persistence.xml. O mesmo vale para um projeto web. Dentro do seu "source folder" você deve ter um diretório META-INF e dentro dele um persistence.xml. Vocẽ pode também ter um orm.xml com suas named-queries e demais informações. Isso você pode ver melhor no J2EE tutorial ou na especificação JPA. Mas é basicamente isso.

Quanto a sua mensagem de erro creio que é o JPA não está achando seu persistence.xml. De qualquer forma você precisa colocar no local certo e garantir que você tenha os jars hibernate, hibernate-annotations e hibernate-entitymanager nas versões menores que hibernate 3.5. Caso você estiver usando já o Hibernate 3.5 você precisa apenas do hibernate.jar, já que nessa versão tudo fica em um jar apenas.

Abraços
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

hibernate-entitymanager esse JAR não está incluso no VRaptor. Baixei ele na net e coloquei o persistence no META-INF, só mudou o final do stack trace:


De qq forma, vou dar uma olhada na especificação do JPA, assim aprendo melhor os detalhes da coisa. Obrigado pela força.

Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline

Estranho esse erro, por estar pedindo essa classe: Caused by: java.lang.NoClassDefFoundError: org/jboss/util/file/ArchiveBrowser$Filter. Já usei muito hibernate e nunca precisei dessa classe.

Na instalação do vraptor há no diretório lib/optional os jars necessários do hibernate. Pegue esses ao invés do que está no site.
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

A versão do hibernate-enti... não era a mais atual. Baixei a mais atual e funfou. Só uma coisa, eu coloquei o showsql no persistence.xml para true, mas não está logando o SQL gerado, tem que fazer alguma coisa no VRaptor?
Mas minha dúvida foi sanada, consegui fazer todo o flw até salvar no BD. Muito obrigado garcia, sozinho eu nunca descobriria.

[]s

Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

Só foi adicionar ao log4j.xml:



Vlw de novo garcia.

Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team