Não sei se tem como, mas eu gostaria de retornar um Objeto e um valor numa mesma query no JPA.
Por exemplo um select p.numero, s from Processo p, Solicitacao s
tem como fazer isso?
É pq assim… toda solicitação é ligada a um processo.
Na classe Processo, tenho uma lista de solicitações.
Só que surgiu a necessidade de fazer uma busca de solicitações.
Solicitação não tem número do processo e eu não quero carregar um processo só pra pegar o número dele e mostrar na tela, entendem?
Até por uma questão de desempenho, visto que cada processo carregaria N solicitações, visto que a lista de solicitações no processo é EAGER por outras necessidades do sistema.
Enfim.
Da pra trazer o número do processo e o objeto solicitação numa mesma query?
Se sim, como faria isso?
Que é possível, sem dúvidas. Mas, lendo o que você descreveu do negócio, entendo que o modelo está incoerente.
É um relacionamento 1 : N, onde é mais comum que as entidades que representam o lado N da relação tenham uma FK que recebe a PK da entidade que representa o 1.
Por exemplo, se eu fosse criar as tabelas Pai e Filho onde cada filho tem um pai e cada pai pode ter vários filhos, eu colocaria uma FK chamada cod_pai na tabela filho.
Enfim, se a tua abordagem permite isso, espero que consiga.
Olha… eu posso estar falando besteira.
Entendo seu conceito pq é o conceito que todos aprendemos quando vamos estudar banco de dados.
Mas essa é uma forma de pensar relacional, não?
Tudo bem… 1 pra N. a chave de 1 vai pra N.
Mas… pensando como OO não seria mais coerente pensar que um pai pode ter 1 ou mais filhos ao inves de cada filho tem um pai?
Ou seria arbitrário?
O que quero dizer é: Enxergar o que você disse como regra, não é pensar puramente relacional?
Bom… fiquei pensando aqui e acho que essa regra só se aplica mesmo no relacional.
Pensando OO, tanto faz vc pensar que um Pai tem uma lista de Filho ou que cada Filho tem um Pai.
Mas… é uma opinião sem base, né? É só o que eu acho.
De qq forma, vou colocar Processo na Solicitacao. =)
[quote=Kura]Olha… eu posso estar falando besteira.
Entendo seu conceito pq é o conceito que todos aprendemos quando vamos estudar banco de dados.
Mas essa é uma forma de pensar relacional, não?
Tudo bem… 1 pra N. a chave de 1 vai pra N.
Mas… pensando como OO não seria mais coerente pensar que um pai pode ter 1 ou mais filhos ao inves de cada filho tem um pai?
Ou seria arbitrário?
O que quero dizer é: Enxergar o que você disse como regra, não é pensar puramente relacional?
Não sei mesmo. só perguntando… o.O[/quote]
Se for pensar puramente em termos do modelo relacional, nem o conceito de relacionamento existe. As pessoas confundem demais entidade-relacionamento com modelo relacional. No modelo relacional, o relacional vem de relação, que é a mesma coisa que tabela. Ou seja, no modelo relacional RELAÇÃO == TABELA. Assim, como não existe o conceito de relacionamento, consequentemente não existe o conceito de navegabilidade. Em compensação, você tem a álgebra relacional, que é muito mais poderosa para compor visões.
Já em termos de OO, temos classes e associações, sendo que as associações podem ter cardinalidade, além da navegabilidade. A navegabilidade, como você mesmo disse, é arbitrária. Ou seja, se duas classes A e B possuem uma associação 1…*, não há nenhuma regra que obrigue que a navegação seja no sentido <- ou ->. Ou seja, você pode definir que B tenha uma referência para A ou que A tenha uma coleção de B. Na prática, a escolha é muito mais uma decisão de implementação do que de modelagem em si.
Mas voltando à pergunta inicial, sim, é perfeitamente possível fazer a query que você postou. Nesse caso, o retorno da consulta é um array (ou lista de arrays) de objetos, obedecendo a sequência declarada na query.