Hibernate e Annotations: Dúvida cruel em relacionamentos

Olá a todos,

Estou iniciando no Hibernate e estou com dúvidas quanto ao funcionamento de consultas especificamente 1:N e N:N.

Vi em vários lugares o uso de “annotations”, em outros o “Criteria” e em outros somente o HQL.

Minha dúvida: é realmente obrigatório o uso de annotations para conseguir realizar este tipo de consulta?

Se alguém puder me dizer qual é a boa prática e também o uso de um exemplo simples, de preferencia usando somente o HQL.

Grato.

Saldações companheiro…

O Hibernate é um framework ORM (Object-relational mapping) - Mapeamento de objeto para relacional…

O que isso quer dizer…

Quer dizer que atravez das anotations ou atravez de xml, você ira especificar como que o seu objeto vai ser traduzido para as famozas tabelas (Estrutura relacional)

Eu particularmente uso annotations, é mais simples do que no xml…
A classe criteria serve para fazer consultas de modo simplificado…
vc não preciza saber nem hql e nem sql para usar tal…

o hql são consultas tbm, porem estas são baseadas no seu “Mapeamento” e não no seu banco…
no site oficial do hibernate tem um bucado de material, principalmente sobre consultas…

De uma passadinha de la…
Att

entre no site do nosso amigo
lá tem ótimos exemplos de relacionamento

http://uaihebert.com/?p=50

[quote=iamthelegend]Olá a todos,

Estou iniciando no Hibernate e estou com dúvidas quanto ao funcionamento de consultas especificamente 1:N e N:N.

Vi em vários lugares o uso de “annotations”, em outros o “Criteria” e em outros somente o HQL.

Minha dúvida: é realmente obrigatório o uso de annotations para conseguir realizar este tipo de consulta?

Se alguém puder me dizer qual é a boa prática e também o uso de um exemplo simples, de preferencia usando somente o HQL.

Grato.[/quote]
Obrigatório, não. A não ser que você queira manter no banco de dados uma integridade referencial baseada na multiplicidade do relacionamento entre as classes.
O objetivo de usar hibernate (leia-se framework ORM), embora muitos não compreendam, vai além de simplesmente “facilitar” a criação de um CRUD.
A idéia é usar a estrutura de classes e seus atributos e relacionamentos em uma forma de criar um panorama que permita o funcionamento de um banco de dados, fidedigno ao que o sistema necessita.
Desta forma, você deveria ter alguma maneira de dizer que a classe A e a classe B se relacionam em uma multiplicidade 1 : N, já B e C possuem multiplicidade de relacionamento N : N bidirecional. Isso significa que você deveria mapear estes relacionamentos de alguma forma, seja usando annotations, XML ou programaticamente.
A forma de consulta através de Criteria se beneficia destes mapeamentos. HQL te dá mais liberdade, porém, dependendo da consulta, você terá como retorno uma Collection<Object[]> e precisará proceder com as devidas ações para obter os valores que precisa.

[quote=renanjp]Saldações companheiro…
[/quote]
Saldação vem de saldo?

[quote=renanjp]
O Hibernate é um framework ORM (Object-relational mapping) - Mapeamento de objeto para relacional…
[/quote] Na minha época era Mapeamento objeto-relacional

[quote=renanjp]
O que isso quer dizer…
[/quote]Perguntas sempre são finalizadas com ?

Onde você aprendeu a escrever? Através é com S no final.

Criteria não é uma classe, é uma interface e a designação para uma API completa que originalmente foi criada no Hibernate e já é implementada em outros “caras” como EJB 3.1

Não precisa, mas é recomendado.
A saída gerada pela API Criteria é um SQL e, como tal, caso você não o conheça, fica difícil ter certeza da efetividade da consulta e torna praticamente possível melhorar e otimizar a pesquisa.

Como assim? Eu consigo fazer coisas que não dependem do mapeamento com HQL, como SELECT sum(*) de alguma coisa.

Você quis dizer: bocado?

[quote=renanjp]
De uma passadinha de la…
Att[/quote]
Desculpa camarada, mas usar um editor de texto e a funcionalidade do corretor ortográfico é uma boa idéia antes de postar algo.
Fico pensando na qualidade do código que você desenvolve, deve ser algo horrível.

Cara que arrogância!
A minha intenção foi ajudar…

Dica: Pare de estudar programação e se dedique um pouco mais as ciências humanas…
Sozinho você não vai a lugar nenhum!

Completamente desnecessário você fazer tais citações no tópico…
Se sua intenção foi ajudar (o que não foi) existe uma coisa chamada mensagem privada…

[quote=renanjp][quote]
Desculpa camarada, mas usar um editor de texto e a funcionalidade do corretor ortográfico é uma boa idéia antes de postar algo.
Fico pensando na qualidade do código que você desenvolve, deve ser algo horrível.[/quote]
[/quote]

Cara que arrogância!
A minha intenção foi ajudar…

Dica: Pare de estudar programação e se dedique um pouco mais as ciências humanas…
Sozinho você não vai a lugar nenhum![/quote]
Ajude de uma forma correta.
Embora haja casos de pessoas que chegaram a bons cargos com um português péssimo, a maioria lê e escreve bem, portanto, sua idéia de ciências humanas é deturpada.
Escrever bem, no âmbito profissional e tão importante quanto inglês.
Ou você acha que o teu chefe, colegas de trabalho e demais pessoas que recebem teus emails com coisas como “atravez”, “saldação” e afins não riem da tua incapacidade?

Bom dia a todos,

primeiramente vamos esclarecer algumas coisas, o forum é destinado a duvidas referente a programação com foco na linguagem JAVA e não destinado a pessoas que querem somente se aparecer escrevendo palavras complexas que um usuário iniciante com duvidas basicas não ira entender, caso alguem queira ajudar em correções de ortografia que para este forum e este assunto especifico desse tópico é irrelevante é melhor mandar um MP, agora me responda uma coisa você fala da mesma maneira que escreve? acho que não né! você gostaria de ser corrigido publicamente, acho que também não? você gostaria de ser corrigido da mesma maneira que corrigiu o colega acima? antes de falarmos de ortografia é melhor aprendermos a nos comportar como pessoas em meio uma sociedade!!! e só pra terminar a melhor maneira de ajudar alguem nesse forum, não é corrigindo ortografia e sim auxiliando em correções sintaxicas da lingaugem JAVA e correções e dicas de lógica, ok!!!

[quote=RafaelCassau]Bom dia a todos,

primeiramente vamos esclarecer algumas coisas, o forum é destinado a duvidas referente a programação com foco na linguagem JAVA e não destinado a pessoas que querem somente se aparecer escrevendo palavras complexas que um usuário iniciante com duvidas basicas não ira entender, caso alguem queira ajudar em correções de ortografia que para este forum e este assunto especifico desse tópico é irrelevante é melhor mandar um MP, agora me responda uma coisa você fala da mesma maneira que escreve? acho que não né! você gostaria de ser corrigido publicamente, acho que também não? você gostaria de ser corrigido da mesma maneira que corrigiu o colega acima? antes de falarmos de ortografia é melhor aprendermos a nos comportar como pessoas em meio uma sociedade!!! e só pra terminar a melhor maneira de ajudar alguem nesse forum, não é corrigindo ortografia e sim auxiliando em correções sintaxicas da lingaugem JAVA e correções e dicas de lógica, ok!!![/quote]
Você é quem mesmo?
Sr. não sei quem, muito obrigado pro tua preocupação, mas, a partir do momento que o fórum é aberto, atrocidades como “atravéz” e “saldação” podem acabar influenciando outras pessoas que consultem o tópico.
É tão ou mais grave que passar uma informação errada.
Aí é que está, eu falo coloquialmente, pois a fala possui, além do uso das palavras, outras ferramentas para auxiliar na transmissão de informações, como gestos e expressão facial e corporal, por exemplo.
Assim como eu não falo da forma que escrevo, por qual razão o camarada renanjp pode escrever da maneira que fala (errado, a propósito)?
O problema aqui é que todo mundo quer se mostrar superior, incluindo você, sr. não sei quem. Qual foi tua contribuição ao tópico? Qual a tua resposta ao autor?
Um me fala de arrogância, mas não admite que escreve porcamente. O outro vem falar de respeito, correção em público, fazendo o mesmo que eu.
Nenhum de vocês vai, em uma reunião com diretores e executivos, apresentar slides com “saldação”, “truta”, “mano”, “é nóis” ou “Eu AmU mEuS mIGuXos” ou mesmo falar desta forma.
Por que, então, precisa ser assim no guj?
Eu respeito quem demonstra respeito.
Isso se reflete na forma de escrever. E é inaceitável que alguém que trabalha com tecnologia não use uma ferramenta para auxiliar essa ação.
Assim como é inaceitável que alguém abra um tópico sem pesquisar no google a respeito. Se não curte o google, usa o bing.

E só para constar, sr. não sei quem é, caso a minha resposta ao autor do tópico esteja errada, total ou parcialmente, esteja a vontade para corrigir-me e para argumentar sobre onde estão meus erros.
Entendo que as pessoas são limitadas, mas aceitar essa limitação e não procurar melhorar é ser medíocre, no mínimo.

Fica mais fácil entender a dúvida se a autor do tópico postar corretamente. Além do mais, uma dúvida mal escrita, pelo menos para mim, desanima de ajudar, até porquê fica difícil entender o que a pessoa quer. E se ninguém corrigir a pessoa e dizer que ela está fazendo algo errado, ela nunca irá melhorar.

(Li o tópico todo e não encontrei nenhuma palavra complexa)

[quote=drsmachado][quote=iamthelegend]Olá a todos,

Estou iniciando no Hibernate e estou com dúvidas quanto ao funcionamento de consultas especificamente 1:N e N:N.

Vi em vários lugares o uso de “annotations”, em outros o “Criteria” e em outros somente o HQL.

Minha dúvida: é realmente obrigatório o uso de annotations para conseguir realizar este tipo de consulta?

Se alguém puder me dizer qual é a boa prática e também o uso de um exemplo simples, de preferencia usando somente o HQL.

Grato.[/quote]
A idéia é usar a estrutura de classes e seus atributos e relacionamentos em uma forma de criar um panorama que permita o funcionamento de um banco de dados, fidedigno ao que o sistema necessita.
Desta forma, você deveria ter alguma maneira de dizer que a classe A e a classe B se relacionam em uma multiplicidade 1 : N, já B e C possuem multiplicidade de relacionamento N : N bidirecional. Isso significa que você deveria mapear estes relacionamentos de alguma forma, seja usando annotations, XML ou programaticamente.
A forma de consulta através de Criteria se beneficia destes mapeamentos. HQL te dá mais liberdade, porém, dependendo da consulta, você terá como retorno uma Collection<Object[]> e precisará proceder com as devidas ações para obter os valores que precisa.
[/quote]

Obrigado a todos pelas respostas.
Vou ignorar assuntos não relacionados ao tópico…

Eu realmente percebi essa idéia; é como se o hibernate fizesse as duas coisas:
1)Criar seu banco de dados através das suas classes obedecendo o Annotations
ou
2)Criar suas classes XML e JAVA obedecendo a estrutura do seu banco de dados, nesse caso ele não usa o Annotations (pelo menos até onde eu sei).

E ainda você pode mesclar o uso dos dois…
Estou certo aqui?

Eu segui um tutorial que usa o Wizard do netbeans. Percebi um enorme ganho de tempo. O Wizard gerá o cfg do hibernate, cria os mapeamentos, gera as classes em java e em xml baseado nas entidades e nos relacionamentos do banco de dados.
Ele não usa annotations em lugar nenhum, ele usa sim o XML para especificar onde os relacionamentos acontecem.

<hibernate-mapping>
    <class name="entidade.Pessoa" table="pessoa" catalog="xserv">
        <id name="idpessoa" type="java.lang.Integer">
            <column name="idpessoa" />
            <generator class="identity" />
        </id>
       <property ...
       ...
       <set name="telefones" inverse="true">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <one-to-many class="entidade.Telefone" />
        </set>

Portanto, posso então prosseguir e continuar pesquisando como fazer consultas sem usar o annotations? Pois você disse que não é obrigatório…
Se tiver um exemplo simples ou me indicar outra solução…

Grato.

[quote=tmvolpato]entre no site do nosso amigo
lá tem ótimos exemplos de relacionamento

http://uaihebert.com/?p=50[/quote]

Vou dar uma olhada sem dúvida.
Obrigado.

Se a forma como as pessoas escrevem faz com que você se sinta desrespeitado, não pague com a mesma moeda corrigindo-a em publico, apenas entre em contato com ela via MP.

Só para constar me chamo Rafael Cassau e não “Sr. Não sem Quem?”.

[quote=iamthelegend][quote=drsmachado][quote=iamthelegend]Olá a todos,

Estou iniciando no Hibernate e estou com dúvidas quanto ao funcionamento de consultas especificamente 1:N e N:N.

Vi em vários lugares o uso de “annotations”, em outros o “Criteria” e em outros somente o HQL.

Minha dúvida: é realmente obrigatório o uso de annotations para conseguir realizar este tipo de consulta?

Se alguém puder me dizer qual é a boa prática e também o uso de um exemplo simples, de preferencia usando somente o HQL.

Grato.[/quote]
A idéia é usar a estrutura de classes e seus atributos e relacionamentos em uma forma de criar um panorama que permita o funcionamento de um banco de dados, fidedigno ao que o sistema necessita.
Desta forma, você deveria ter alguma maneira de dizer que a classe A e a classe B se relacionam em uma multiplicidade 1 : N, já B e C possuem multiplicidade de relacionamento N : N bidirecional. Isso significa que você deveria mapear estes relacionamentos de alguma forma, seja usando annotations, XML ou programaticamente.
A forma de consulta através de Criteria se beneficia destes mapeamentos. HQL te dá mais liberdade, porém, dependendo da consulta, você terá como retorno uma Collection<Object[]> e precisará proceder com as devidas ações para obter os valores que precisa.
[/quote]

Obrigado a todos pelas respostas.
Vou ignorar assuntos não relacionados ao tópico…

Eu realmente percebi essa idéia; é como se o hibernate fizesse as duas coisas:
1)Criar seu banco de dados através das suas classes obedecendo o Annotations
ou
2)Criar suas classes XML e JAVA obedecendo a estrutura do seu banco de dados, nesse caso ele não usa o Annotations (pelo menos até onde eu sei).

E ainda você pode mesclar o uso dos dois…
Estou certo aqui?

Eu segui um tutorial que usa o Wizard do netbeans. Percebi um enorme ganho de tempo. O Wizard gerá o cfg do hibernate, cria os mapeamentos, gera as classes em java e em xml baseado nas entidades e nos relacionamentos do banco de dados.
Ele não usa annotations em lugar nenhum, ele usa sim o XML para especificar onde os relacionamentos acontecem.

<hibernate-mapping>
    <class name="entidade.Pessoa" table="pessoa" catalog="xserv">
        <id name="idpessoa" type="java.lang.Integer">
            <column name="idpessoa" />
            <generator class="identity" />
        </id>
       <property ...
       ...
       <set name="telefones" inverse="true">
            <key>
                <column name="idpessoa" not-null="true" />
            </key>
            <one-to-many class="entidade.Telefone" />
        </set>

Portanto, posso então prosseguir e continuar pesquisando como fazer consultas sem usar o annotations? Pois você disse que não é obrigatório…
Se tiver um exemplo simples ou me indicar outra solução…

Grato.[/quote]
Cuidado com o wizard do netbeans, algumas vezes ele atrapalha, mais que ajuda.

[quote=RafaelCassau]Se a forma como as pessoas escrevem faz com que você se sinta desrespeitado, não pague com a mesma moeda corrigindo-a em publico, apenas entre em contato com ela via MP.

Só para constar me chamo Rafael Cassau e não “Sr. Não sem Quem?”.

[/quote]
Até onde eu vi, não recebi nenhuma MP tua.
Será que está com delay?

Não postarei mais nada sobre esse assunto, pois está bem fora do tópico, e como afirmado pelo Sr. não estou com delay, pois não sou uma maquina.

observe:

você responderia?

não adianta responder pois irei ignorar qualquer resposta a respeito desse assunto, agora se quizer falar de Java e coisas do genero, ae sim falamos ok!

Acho válida a preservação do nosso idioma.
O brasileiro está indo por um caminho sem retorno ao se acostumar com abominações
nas formas de expressão.

Meu primeiro tópico foi reeditado para que eu corrigisse um erro de português !!

Está na hora de levantarmos contra essa chama demoníaca chamada "liberdade cultural"
alimentada pelas terríveis obras da mídia ( cita-se o funk - atual, pois o antigo era até aceitável ).

Você pode até xingar uma pessoa, mas dependendo de como o faz, poderá até receber um abraço dela.
Quem não te conhece vai te avaliar de todas as formas que tiver, inclusive sua escrita e até sua maneira de se vestir.

Se não tiver um corretor ortográfico, dê uma repassada no seu texto.
Se ainda assim passar algum erro e alguém te corrigir ( como espero que façam comigo ) agradeça
por ser num fórum e não numa entrevista de emprego quando seu futuro chefe estiver lendo seu currículo.

Abraçamo-nos todos e vamos tocar a vida.

[i][color=blue]Olá a todos,

Estou iniciando no Hibernate e estou com dúvidas quanto ao funcionamento de consultas especificamente 1:N e N:N.

Vi em vários lugares o uso de “annotations”, em outros o “Criteria” e em outros somente o HQL.

Minha dúvida: é realmente obrigatório o uso de annotations para conseguir realizar este tipo de consulta?

Se alguém puder me dizer qual é a boa prática e também o uso de um exemplo simples, de preferencia usando somente o HQL.

Grato. [/color][/i]

Já que é novato no Hibernate, então esqueça Criteria no momento.
Na minha opnião seria melhor “começar do zero” :shock: , ou seja, crie suas consultas usando mesmo HQL.
E como tem dificuldade com as cardinalidades, seria bom estudar bem os conceitos e depois entender como o Hibernate trabalha com elas (anotações @OneToMany, @ManyToOne, …).