Dúvida Conceitual HIBERNATE

pessoal estou me interando com hibernate…to achando tranquilo…

mas vendo exemplos etc…me surgiu um dúvida…

vi num exemplo de projeto que diz usar Hibernate/ JPA (ainda não li muito a respeito da JPA) e vi um código DAO um pouco diferente do que tenho visto…
um método para listar:

public List listAll(Integer idUsuario) throws DataAccessException { Query qry = em.createQuery("SELECT c FROM Usuario c WHERE c.idUser.idUser = :idUser"); qry.setParameter("idUser", idUser); return qry.getResultList(); }
não consegui achar uma referência pro “c” so SELECT c FROM…de onde veio esse “c”…

minha dúvida acima é: o código do projeto está totalmente rodadando, porém não encontrei nenhuma classe do tipo UTIL abaixo, a maioria do código Hibernante que tenho visto tem uma classe do tipo abaixo:

try{ Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); } catch(Exception e) { e.printStackTrace(); }
como o primeiro código ta abrindo sessão…transação…sabem me dizer…pois o exemplo ta rodando e não tem nenhuma classe Utilitaria do tipo acima…
fiquei com essa dúvida…

Oi… com relação à referência a “c” que vc nao achou está logo ali após Usuario (é um alias para a tabela Usuario):

“SELECT c FROM Usuario c WHERE c.idUser.idUser = :idUser”

Quanto ao fato de estar funcionando sem haver a classe Util, provavelmente vc deve estar rodando os codigos num servidor de aplicacao (como o JBoss)… e, se for o caso, o entityManager é injetado automaticamente, ja com uma transacao aberta, sem que vc precise explicitamente utilizar uma clase Util (essa classe eh mais comumente necessaria em ambientes SE, de maneira mais geral, em ambientes nao gerenciados por servidor de aplicação).

Espero ter ajudado.

[quote=RafaelVS]Oi… com relação à referência a “c” que vc nao achou está logo ali após Usuario (é um alias para a tabela Usuario):

“SELECT c FROM Usuario c WHERE c.idUser.idUser = :idUser”

Quanto ao fato de estar funcionando sem haver a classe Util, provavelmente vc deve estar rodando os codigos num servidor de aplicacao (como o JBoss)… e, se for o caso, o entityManager é injetado automaticamente, ja com uma transacao aberta, sem que vc precise explicitamente utilizar uma clase Util (essa classe eh mais comumente necessaria em ambientes SE, de maneira mais geral, em ambientes nao gerenciados por servidor de aplicação).

Espero ter ajudado.[/quote]
obrigado pelas respostas, me esclarecem bastante…
quanto ao alias realmente não percebi, fiquei tentando entendo do framework que acabei nem vendo esse pequeno detalhe que seria a resposta…eh a coisa do tipo “vc tropeça nos pequenos obstáculos, pq os grandes vc logo enxerga…” :smiley:

agora quanto ao servidor, está sendo rodado no tomcat mesmo, agora o fato que esqueci de mencionar, e pelo que vc falou acho que deve ser isto, neste projeto que citei de exemplo, está utilizando também o framework Spring pra injeção de depedências nas classes, e também algumas configurações com o hibernate…

caro RafaelVS, será q no caso essa injeção do entityManager está sendo realizada pelo Spring ?

pergunto isso devido eu ter um outro exemplo de Hibernate rodando que utiliza uma classe Util, mas Também utiliza Spring…
estou tentando aprender o spring também…por isso estou tentando já aprender com hibernate…

Eu sei que eh possivel o Spring estar fazendo a injeção.

Mas nao sei te dizer como vc poderia ter certeza disso, acho que teria que ver o arquivo de configuracao do Spring… deve ter a declaração de um bean que eh o EntityManager, mas n tenho mt conhecimento sobre Spring e, se for esse o caso, n sei te poderia te ajudar com mais detalhes. :cry:

[quote=RafaelVS]Eu sei que eh possivel o Spring estar fazendo a injeção.

Mas nao sei te dizer como vc poderia ter certeza disso, acho que teria que ver o arquivo de configuracao do Spring… deve ter a declaração de um bean que eh o EntityManager, mas n tenho mt conhecimento sobre Spring e, se for esse o caso, n sei te poderia te ajudar com mais detalhes. :cry: [/quote]

hum…isso ajudou…no arquivo de configuração do spring realmente tem a declaração de um bean

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
e dentro das classes persistidas tem um import que faz a auto-injeção do EntityManager

import javax.persistence.PersistenceContext;

valeu…ajudou bastante…

Então matou a charada hehehe :smiley:

O uso de Spring facilita bastante quem desenvolve com EJB 2.x… mas a partir do EJB 3.0, as injecoes dos objetos do Java EE sao suportadas “nativamente” pelo servidor de aplicação, o que acho q dispensaria o uso de Spring (pelo menos pra injetar tais objetos).