Hibernate/JPA duvida cruel rsrs

16 respostas
J

Oi gente,

eu sei que esse tipo de pergunta muitas vezes acaba dando em briga de foice aki no forum … mas …

Digamos que eu esteja fazendo uma aplicação que não usa EJBs, ela não vai rodar em um servidor de aplicação apenas em um container de servlets…

Já tenho em mente usar SEMPRE anotações JPA e não as do Hibernate, pelo menos se eu tiver que um dia transformar tudo em EntityBean já tem um passo feito, ou se quiser mudar pra toplink

Mas e quanto na programação?

Eu posso simplismente usar a API do Hibernate, abrir um sessão, etc etc fazer um hibernateUtils pra pegar assessões …

Mas, eu tambem posso fazer da forma padrão , utilizando o pacote javax.persistence assim como fazemos quando usamos EJBs:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-hibernate");
	EntityManager em = emf.createEntityManager();
	
	em.getTransaction().begin();
	Cliente c = new Cliente();
	c.setIdade("18");

usando a biblioteca do javax.persistence para realizaxr as transações , o Hibernate fica reduzido meramente a um implementador da especificação e só…

Ou seja: Sacrifico o padrão para ter funcionalidades do Hibernate?

PS: o TopLink é agora a Referencia de Implementação da JPA, já virá o toplink dentro da API do Java7 … sealguem achar necessario levar isso em consideração …

Brigado pessoal :slight_smile:

16 Respostas

rod

Eu prefiro utilizar a especificação JPA em conjunto com o Spring fazendo a injeção do EntityManager e todo o controle transacional.

Mas, eu tambem posso fazer da forma padrão , utilizando o pacote javax.persistence assim como fazemos quando usamos EJBs:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“jpa-hibernate”);
EntityManager em = emf.createEntityManager();

Geralmente quando se utiliza EJB3, o entityManager é injetado pelo AS utilizando a anotação @PersistenceContext

von.juliano

Tudo depende amigo, mas avalie o seguinte: existe/existirá em algum momento a real possibilidade de mudar do Hibernate para o Toplink? Sinceramente, não me lembro de ter trabalhado em algum projeto que depois de decidido, a impementação foi mudada. Mas se for o seu caso, vale a pena manter os padrões.

Pessoalmente, eu prefiro utilizar as funcionalidades do Hibernate, acho seu uso direto muito melhor do que apenas com o EntityManager. Criteria Rules! :smiley:

Essa é a minha opinião, quando decidir como vai fazer, posta aqui pra gente ficar sabendo! Flw! :thumbup:

J

rlazoti:
Eu prefiro utilizar a especificação JPA em conjunto com o Spring fazendo a injeção do EntityManager e todo o controle transacional.

Mas, eu tambem posso fazer da forma padrão , utilizando o pacote javax.persistence assim como fazemos quando usamos EJBs:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“jpa-hibernate”);
EntityManager em = emf.createEntityManager();

Geralmente quando se utiliza EJB3, o entityManager é injetado pelo AS utilizando a anotação @PersistenceContext

é eu tambem uso o @PersistenceContext :slight_smile: dei esse exemplo aí pq é um jeito q sei q funciona, pra criar um EntityManager sem o container EJB…

Eu vou usar JSF no projeto … é realmente uma boa ideia fazer a injeção do EntityManager pelos recursos do JSF, não tenho muita certeza de como fazer isso ainda … colocar o entityManager em escopo de requisição já funcionaria será?

brigaduu

J

von.juliano:
Tudo depende amigo, mas avalie o seguinte: existe/existirá em algum momento a real possibilidade de mudar do Hibernate para o Toplink? Sinceramente, não me lembro de ter trabalhado em algum projeto que depois de decidido, a impementação foi mudada. Mas se for o seu caso, vale a pena manter os padrões.

Pessoalmente, eu prefiro utilizar as funcionalidades do Hibernate, acho seu uso direto muito melhor do que apenas com o EntityManager. Criteria Rules! :smiley:

Essa é a minha opinião, quando decidir como vai fazer, posta aqui pra gente ficar sabendo! Flw! :thumbup:

Oi :slight_smile: primeiramente obrigado pela atenção

É realmente eu acho q se eu botar hibernate não vai precisar mudar o que mais me deixa em dúvida é essa questão dele virar referencia de implantação … o negocio é padrão … já vim no proprio java :S Tá certo que, só pq o glassfish é implementação padrao não quer dizer que todo mundo vai usar ele, mas sei lah rsrsrs Eu acho q o Hibernate tem mais documentação por ai … mas … até quando?

E pra piorar rsrsr andei falando com um cara q conheci na net, ele foi consultor de arquitetura da Sun, o cara é tipo esses Highlander do Java ahuahua que dá respostas estilo “mestre dos magos” e some ahuahauh e ele é ferrenhamente a favor do TopLink só por ser implementação padrão …

Mas eu realmente to querendo usar o Hibernate …
mas … só uma duvida que não quer sair da minha pobre cabecinha
Conheço sobre JPA, já dei uma lida na especcificação da SUN so ejb 3 … conheço aplicações web, injeção de dependencia … inversao decnotrole blabla rsrss
Só que eu não entendi … até onde eu posso usar os recursos da especificação EJB 3, nas minhas aplicações que NAO usam EJBs
sei que posso usar a JPA … vi esses dias um codigo q eu tinha feito ano passado ahuahua que usava o EntityManager em uma aplicação swing, nem lembrava mais disso ahuahuahu
Existe algum servlet container que injeta o EntityManager e controla a abertura e fechamento do mesmo etc etc assim como os application containers fazem com os EntityBeans?
Análogo a isso, vi na apostila da Caelum eles ensinam a injetar um Session do Hibernate via Filter, e no reponse no mesmo Filter fecha-se a session, achei sinceramente bem feinha a solução. Queria saber se tem um servlet container q faça isso por mim, sem precisar sujar as mãos con Filters abrir e fechar sessões … assim como no EJB … mas sem todo o peso dos recursos transacionais ahuahauhau ( eu acho q o que eu quero é um EJB mais leve ahuahuhuahhauahu, vou criar minha propria especificação rsrsrrs)

Gente, desculpem se eu to querendo demais ou se to querendo reinventar a roda, mas é q só esses dias eu vi a possibilidade de usar outros recursos EJB alem do JPA nas aplicações de servlets e swing … e ainda nun entendi direito o que posso usar ou não de um no outro …

Obrigado pelas duas repostas :), gostei da forma que vcs reponderam, quando se faz uma pergunta assim no forum muitas vezes vem algumas pessoas que acham donas da verdade rsrs, vcs deram respostas inteligentes , ou seja, abertas à possibilidades.

Obrigadoo :slight_smile:

rod

javando:
rlazoti:
Eu prefiro utilizar a especificação JPA em conjunto com o Spring fazendo a injeção do EntityManager e todo o controle transacional.

Mas, eu tambem posso fazer da forma padrão , utilizando o pacote javax.persistence assim como fazemos quando usamos EJBs:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“jpa-hibernate”);
EntityManager em = emf.createEntityManager();

Geralmente quando se utiliza EJB3, o entityManager é injetado pelo AS utilizando a anotação @PersistenceContext

é eu tambem uso o @PersistenceContext :slight_smile: dei esse exemplo aí pq é um jeito q sei q funciona, pra criar um EntityManager sem o container EJB…

Eu vou usar JSF no projeto … é realmente uma boa ideia fazer a injeção do EntityManager pelos recursos do JSF, não tenho muita certeza de como fazer isso ainda … colocar o entityManager em escopo de requisição já funcionaria será?

brigaduu

Injetar um EntityManager diretamente num managedBean?
Se foi isso que você perguntou, é uma péssima ideia! Seria legal você injetar no managedBean uma classe que abstraia suas regras de negocio como um Service, Facade ou até mesmo um DAO.

rod

javando:
von.juliano:
Tudo depende amigo, mas avalie o seguinte: existe/existirá em algum momento a real possibilidade de mudar do Hibernate para o Toplink? Sinceramente, não me lembro de ter trabalhado em algum projeto que depois de decidido, a impementação foi mudada. Mas se for o seu caso, vale a pena manter os padrões.

Pessoalmente, eu prefiro utilizar as funcionalidades do Hibernate, acho seu uso direto muito melhor do que apenas com o EntityManager. Criteria Rules! :smiley:

Essa é a minha opinião, quando decidir como vai fazer, posta aqui pra gente ficar sabendo! Flw! :thumbup:

Oi :slight_smile: primeiramente obrigado pela atenção

É realmente eu acho q se eu botar hibernate não vai precisar mudar o que mais me deixa em dúvida é essa questão dele virar referencia de implantação … o negocio é padrão … já vim no proprio java :S Tá certo que, só pq o glassfish é implementação padrao não quer dizer que todo mundo vai usar ele, mas sei lah rsrsrs Eu acho q o Hibernate tem mais documentação por ai … mas … até quando?

E pra piorar rsrsr andei falando com um cara q conheci na net, ele foi consultor de arquitetura da Sun, o cara é tipo esses Highlander do Java ahuahua que dá respostas estilo “mestre dos magos” e some ahuahauh e ele é ferrenhamente a favor do TopLink só por ser implementação padrão …

Mas eu realmente to querendo usar o Hibernate …
mas … só uma duvida que não quer sair da minha pobre cabecinha
Conheço sobre JPA, já dei uma lida na especcificação da SUN so ejb 3 … conheço aplicações web, injeção de dependencia … inversao decnotrole blabla rsrss
Só que eu não entendi … até onde eu posso usar os recursos da especificação EJB 3, nas minhas aplicações que NAO usam EJBs
sei que posso usar a JPA … vi esses dias um codigo q eu tinha feito ano passado ahuahua que usava o EntityManager em uma aplicação swing, nem lembrava mais disso ahuahuahu
Existe algum servlet container que injeta o EntityManager e controla a abertura e fechamento do mesmo etc etc assim como os application containers fazem com os EntityBeans?
Análogo a isso, vi na apostila da Caelum eles ensinam a injetar um Session do Hibernate via Filter, e no reponse no mesmo Filter fecha-se a session, achei sinceramente bem feinha a solução. Queria saber se tem um servlet container q faça isso por mim, sem precisar sujar as mãos con Filters abrir e fechar sessões … assim como no EJB … mas sem todo o peso dos recursos transacionais ahuahauhau ( eu acho q o que eu quero é um EJB mais leve ahuahuhuahhauahu, vou criar minha propria especificação rsrsrrs)

Gente, desculpem se eu to querendo demais ou se to querendo reinventar a roda, mas é q só esses dias eu vi a possibilidade de usar outros recursos EJB alem do JPA nas aplicações de servlets e swing … e ainda nun entendi direito o que posso usar ou não de um no outro …

Obrigado pelas duas repostas :), gostei da forma que vcs reponderam, quando se faz uma pergunta assim no forum muitas vezes vem algumas pessoas que acham donas da verdade rsrs, vcs deram respostas inteligentes , ou seja, abertas à possibilidades.

Obrigadoo :)

Se sua aplicação vai rodar num servlet container, minha dica é utilizar Spring para fazer DI/IOC, controle transacional e até mesmo logging.
O Spring vai te proporcionar tudo e mais um pouco que o EJB3 rodando num AS te oferece.

J

rlazoti:
javando:
von.juliano:
Tudo depende amigo, mas avalie o seguinte: existe/existirá em algum momento a real possibilidade de mudar do Hibernate para o Toplink? Sinceramente, não me lembro de ter trabalhado em algum projeto que depois de decidido, a impementação foi mudada. Mas se for o seu caso, vale a pena manter os padrões.

Pessoalmente, eu prefiro utilizar as funcionalidades do Hibernate, acho seu uso direto muito melhor do que apenas com o EntityManager. Criteria Rules! :smiley:

Essa é a minha opinião, quando decidir como vai fazer, posta aqui pra gente ficar sabendo! Flw! :thumbup:

Oi :slight_smile: primeiramente obrigado pela atenção

É realmente eu acho q se eu botar hibernate não vai precisar mudar o que mais me deixa em dúvida é essa questão dele virar referencia de implantação … o negocio é padrão … já vim no proprio java :S Tá certo que, só pq o glassfish é implementação padrao não quer dizer que todo mundo vai usar ele, mas sei lah rsrsrs Eu acho q o Hibernate tem mais documentação por ai … mas … até quando?

E pra piorar rsrsr andei falando com um cara q conheci na net, ele foi consultor de arquitetura da Sun, o cara é tipo esses Highlander do Java ahuahua que dá respostas estilo “mestre dos magos” e some ahuahauh e ele é ferrenhamente a favor do TopLink só por ser implementação padrão …

Mas eu realmente to querendo usar o Hibernate …
mas … só uma duvida que não quer sair da minha pobre cabecinha
Conheço sobre JPA, já dei uma lida na especcificação da SUN so ejb 3 … conheço aplicações web, injeção de dependencia … inversao decnotrole blabla rsrss
Só que eu não entendi … até onde eu posso usar os recursos da especificação EJB 3, nas minhas aplicações que NAO usam EJBs
sei que posso usar a JPA … vi esses dias um codigo q eu tinha feito ano passado ahuahua que usava o EntityManager em uma aplicação swing, nem lembrava mais disso ahuahuahu
Existe algum servlet container que injeta o EntityManager e controla a abertura e fechamento do mesmo etc etc assim como os application containers fazem com os EntityBeans?
Análogo a isso, vi na apostila da Caelum eles ensinam a injetar um Session do Hibernate via Filter, e no reponse no mesmo Filter fecha-se a session, achei sinceramente bem feinha a solução. Queria saber se tem um servlet container q faça isso por mim, sem precisar sujar as mãos con Filters abrir e fechar sessões … assim como no EJB … mas sem todo o peso dos recursos transacionais ahuahauhau ( eu acho q o que eu quero é um EJB mais leve ahuahuhuahhauahu, vou criar minha propria especificação rsrsrrs)

Gente, desculpem se eu to querendo demais ou se to querendo reinventar a roda, mas é q só esses dias eu vi a possibilidade de usar outros recursos EJB alem do JPA nas aplicações de servlets e swing … e ainda nun entendi direito o que posso usar ou não de um no outro …

Obrigado pelas duas repostas :), gostei da forma que vcs reponderam, quando se faz uma pergunta assim no forum muitas vezes vem algumas pessoas que acham donas da verdade rsrs, vcs deram respostas inteligentes , ou seja, abertas à possibilidades.

Obrigadoo :)

Se sua aplicação vai rodar num servlet container, minha dica é utilizar Spring para fazer DI/IOC, controle transacional e até mesmo logging.
O Spring vai te proporcionar tudo e mais um pouco que o EJB3 rodando num AS te oferece.

cara … gostei da ideia viu … :-), mas não to afim de abrir mão das facilidades de um framework modular como o JSF … ou seja … queria integrar o JSF com o Spring … to lendo aki um artigo sobre … mas nun to sacando muitoooo bem nao hauahu mas to indo …

você acha q é viavel integrar spring com o jsf?

(cara quando eu for arquiteto ahuahau esses meus trabalhos como freela vão me render muito ahuahu esse negocio de ficar avaliando tecnologia q a gente nunca faz direito quando é programador CLT é moh legal ahuahua)

valeu

J

javando:
rlazoti:
javando:
von.juliano:
Tudo depende amigo, mas avalie o seguinte: existe/existirá em algum momento a real possibilidade de mudar do Hibernate para o Toplink? Sinceramente, não me lembro de ter trabalhado em algum projeto que depois de decidido, a impementação foi mudada. Mas se for o seu caso, vale a pena manter os padrões.

Pessoalmente, eu prefiro utilizar as funcionalidades do Hibernate, acho seu uso direto muito melhor do que apenas com o EntityManager. Criteria Rules! :smiley:

Essa é a minha opinião, quando decidir como vai fazer, posta aqui pra gente ficar sabendo! Flw! :thumbup:

Oi :slight_smile: primeiramente obrigado pela atenção

É realmente eu acho q se eu botar hibernate não vai precisar mudar o que mais me deixa em dúvida é essa questão dele virar referencia de implantação … o negocio é padrão … já vim no proprio java :S Tá certo que, só pq o glassfish é implementação padrao não quer dizer que todo mundo vai usar ele, mas sei lah rsrsrs Eu acho q o Hibernate tem mais documentação por ai … mas … até quando?

E pra piorar rsrsr andei falando com um cara q conheci na net, ele foi consultor de arquitetura da Sun, o cara é tipo esses Highlander do Java ahuahua que dá respostas estilo “mestre dos magos” e some ahuahauh e ele é ferrenhamente a favor do TopLink só por ser implementação padrão …

Mas eu realmente to querendo usar o Hibernate …
mas … só uma duvida que não quer sair da minha pobre cabecinha
Conheço sobre JPA, já dei uma lida na especcificação da SUN so ejb 3 … conheço aplicações web, injeção de dependencia … inversao decnotrole blabla rsrss
Só que eu não entendi … até onde eu posso usar os recursos da especificação EJB 3, nas minhas aplicações que NAO usam EJBs
sei que posso usar a JPA … vi esses dias um codigo q eu tinha feito ano passado ahuahua que usava o EntityManager em uma aplicação swing, nem lembrava mais disso ahuahuahu
Existe algum servlet container que injeta o EntityManager e controla a abertura e fechamento do mesmo etc etc assim como os application containers fazem com os EntityBeans?
Análogo a isso, vi na apostila da Caelum eles ensinam a injetar um Session do Hibernate via Filter, e no reponse no mesmo Filter fecha-se a session, achei sinceramente bem feinha a solução. Queria saber se tem um servlet container q faça isso por mim, sem precisar sujar as mãos con Filters abrir e fechar sessões … assim como no EJB … mas sem todo o peso dos recursos transacionais ahuahauhau ( eu acho q o que eu quero é um EJB mais leve ahuahuhuahhauahu, vou criar minha propria especificação rsrsrrs)

Gente, desculpem se eu to querendo demais ou se to querendo reinventar a roda, mas é q só esses dias eu vi a possibilidade de usar outros recursos EJB alem do JPA nas aplicações de servlets e swing … e ainda nun entendi direito o que posso usar ou não de um no outro …

Obrigado pelas duas repostas :), gostei da forma que vcs reponderam, quando se faz uma pergunta assim no forum muitas vezes vem algumas pessoas que acham donas da verdade rsrs, vcs deram respostas inteligentes , ou seja, abertas à possibilidades.

Obrigadoo :)

Se sua aplicação vai rodar num servlet container, minha dica é utilizar Spring para fazer DI/IOC, controle transacional e até mesmo logging.
O Spring vai te proporcionar tudo e mais um pouco que o EJB3 rodando num AS te oferece.

cara … gostei da ideia viu … :-), mas não to afim de abrir mão das facilidades de um framework modular como o JSF … ou seja … queria integrar o JSF com o Spring … to lendo aki um artigo sobre … mas nun to sacando muitoooo bem nao hauahu mas to indo …

você acha q é viavel integrar spring com o jsf?

(cara quando eu for arquiteto ahuahau esses meus trabalhos como freela vão me render muito ahuahu esse negocio de ficar avaliando tecnologia q a gente nunca faz direito quando é programador CLT é moh legal ahuahua)

valeu

to lendo aki um artigo sobre spring …

A interface Session do Hibernate é similar a uma conexão com o banco de dados, ela tem de ser aberta e fechada nos tempos apropriados para prevenir erros e leaks de memória. Na minha opinião, a maior vantagem de usar Spring com Hibernate é que você não tem de gerenciar as aberturas e fechamentos das Sessions.

to gostando rsrs
http://javafree.uol.com.br/artigo/871470/

Pedrosa

Além disso o Spring trabalha com transações de forma muito poderosa, não gerencie na mão.

J

sim … to vendo isso … quero entender bem o Spring e ver se começo logo a parte web do projeto … faz uma semana q to fazendo mapeamento das entidades kkk

já to vendo q realmente é uma otima forma o JSF com o Spring … JSF facilita fazeer a apresentação pro usuario e o Spring facilita o gerenciamento das transações :slight_smile:

L

javando:
sim … to vendo isso … quero entender bem o Spring e ver se começo logo a parte web do projeto … faz uma semana q to fazendo mapeamento das entidades kkk

já to vendo q realmente é uma otima forma o JSF com o Spring … JSF facilita fazeer a apresentação pro usuario e o Spring facilita o gerenciamento das transações :)

Se vc esta pensando em utilizar JSF acredito que vc deva levar em conta o JBoss Seam , “Spring facilita algumas coisas ,Jsf outras” , porem
a sinergia entre os dois nem sempre e a melhor,neste caso (JSF) o Seam traz grandes beneficios,vale a pena dar uma olhada. :wink:

J

Oh lgweb valeu mesmo hein … :slight_smile:

Procurei aqui alguma coisa sobre o Seam e vi que ele também tem controle transacional e tals … mas que ele tem algo do spring :S não entendi essa parte …

O Seam tem seus proprios controles transacionais ou ele implementa o Spring internamente? rs Li um artigo da Global Code mas me confundi quando disseram que o seam tinha uma relação com o Spring … Tem como me explicar isso? Nao encontrei direito algo q explique o q o seam tem a ver com o spring :slight_smile:

valeuuu

L

Cara esta vou ficar te devendo,mas acredito que ele nao use implementacao do spring internamente para controle de transaçoes,acredito que ele possa ser utilizado com Spring,mas nao que ele use o Spring por debaixo dos panos,nao que eu saiba…
Vamos ver se alguem com mais experiencia pode tirar esta duvida.
t+

J

blz, mas pelo o que eu entendi ele é meio q “concorrente” do spring?

sei q o JBoss seam tem mais é o objetivo de ligar tudo …

mas o que será que o spring tem q o seam não tem? ou ao contrario …

:slight_smile:

J

é meio concorrente mesmo …

achei uma entrevista de um cara na globalcode e ele diz q algumas funcionalidades sao concorrentes mas o seam integra mais as coisas … No mais ele ta dizendo que o seam é melhor opção mas eu to tendo um pouco de cuidado quanto a essa afirmação tendo em vista q a globalcode defente o seam ( até o site deles é em seam )

O JBoss Seam também é um projeto open source criado inicialmente pelo Gavin King (o mesmo criador do framework Hibernate) e mantido pelo grupo JBoss, uma divisão da Red Hat, para complementar a plataforma Java EE 5. Através do uso intenso dos padrões de projeto “inversão de controle” e “injeção de dependências” o JBoss Seam promove a integração das tecnologias JSF, EJB 3 e JPA nas nossas aplicações. Várias funcionalidades disponibilizadas pelo JBoss Seam conflitam e concorrem com algumas funcionalidades do Spring Framework. Contudo, o diferencial do JBoss Seam está em prover uma implementação revolucionária de contextos web e o gerenciamento automático de um contexto de persistência e um contexto transacional já na camada de apresentação de uma aplicação web. Além disso, o JBoss Seam resolve problemas no acesso concorrente aos objetos armazenados em contextos web por várias requisições Ajax e assíncronas a partir de um usuário usando um browser.

http://www.globalcode.com.br/site/noticias/painel.seam?chave=EntrevistaSpock

J

É … cacei bastante sobre o Seam e o Spring …

Como o projeto que eu farei é simples … vou usar o Seam realment eé muito bom … e várias coisas que o JSF me dava dor de cabeça ele ajuda a resolver mas vejo que para um projeto maior dá pra usar o Seam com o Spring … achei bastante interessante essa possibilidade …

e como o projetinho q vou fazer é realmente passivel de virar uma coisa bem grande vou usar em seam e terei possibilidade de botar spring mais tarde ( eu não rsrs outro pq terminando esse vou tratar de voltar a trampar de CLT ahuahauhau deixar re preguiça)

Quanto a minha questao sobre como gerenciar … se eu ia ter o hibernate utils ou se ia fazer com os entityManagers, vou deixar isso a cargo do seam :slight_smile: afinal os caras da JBoss devem manjar muito mais de java q eu hhehehehe

Mas eu vou fazer das tripas coração pra usar as Anotations do javax.persistence pois o seguro morreu de velho rsrs :slight_smile:

brigado gente :slight_smile: acho q o topico foi bem produtivo e graças a Deus não apareceu nenhum dono da verdade por aqui ahuahuahau

abraços

Criado 15 de novembro de 2009
Ultima resposta 17 de nov. de 2009
Respostas 16
Participantes 5