JPA @OneToMany com HQL

8 respostas
cristianovieira

Olá boa tarde, gostaria de saber se haveria possibilidade de ser feito um relacionamento @OneToMany com uma SQL para ser executada nesse relacionamento. Bom a ideia é trazer somente registros com data menor de 3 dias. Segue abaixo o relacionamento:

@OneToMany    
@Cascade(value={CascadeType.SAVE_UPDATE})    
@JoinColumn(name="sino_id")  
private List<SisNoticias> sisnoticias;

Relacionamento unidirecional, ou seja, sempre vai trazer tudo a não ser que eu execute um filter pra trazer o que eu realmente quero, com uma sql ou hql embutida resolveria meu problema. Fico no aguardo. Obrigado.

8 Respostas

asandrob

HQL

cristianovieira

Olá asandrob obrigado por responder, eu só não entendi a sintaxe de aonde irei colocar a hql no relacionamento, se puder colar um exemplo de relacionamento com hql eu ficaria grato.
Quando penso em hql com relacionamento penso em algo assim:

@OneToMany(“from objeto where objeto.sisnoticias.data >= dataDesejada”)

asandrob

cristianovieira:
Olá asandrob obrigado por responder, eu só não entendi a sintaxe de aonde irei colocar a hql no relacionamento, se puder colar um exemplo de relacionamento com hql eu ficaria grato.
Quando penso em hql com relacionamento penso em algo assim:

@OneToMany(“from objeto where objeto.sisnoticias.data >= dataDesejada”)

Cristiano, a HQL não é responsável pelo relacionamento. O que é responsável pelo relacionamento são as anotações que tu faz nas tuas classes de modelo.
HQL é uzado para recuperar os dados, é semelhante a SQL, só que a lógica é um pouco diferente.
Se me permite, eu te sugiro dar uma olhada nesta apostila:
http://www.k19.com.br/downloads/apostilas-java/k19-k21-persistencia-com-jpa2-e-hibernate
Aqui tu vais encontrar um bom material sobre JPA, isso inclui uma boa noção sobre relacionamentos e JPQL(HQL é quase a mesma coisa).

cristianovieira

Olá asandrob, correto, talvez eu não tenha me expressado corretamente, mas o que eu preciso é o seguinte, o relacionamento ja está pronto com as anotações, o que preciso é que ao invés do relacionamento recuperar todos os registros da tabela do relacionamento ele recuperar apenas o que tiver na HQL.

asandrob

Então podes usar uma NamedQuery:
Põe isso no teu modelo

E no DAO:

Query query = manager.createNamedQuery("Objeto.noticiasRecentes"); query.setParameter("dataDesejada", coloca aqui a data que tu precisas); List<Objeto> noticiasRecentes = query.getResultList();

cristianovieira

Pois então, eu utilizo aqui dao generico só precisava mesmo colocar a query na declaração do relacionamento, ja possuo métodos de pesquisa. A ideia mesmo era colocar a hql dentro da declaraçao do relacionamento. Mas blz, deu a entender que o que estou querendo fazer não existe. De qualquer forma eu agradeço a atenção asandrob

asandrob

Pois é, DAO’s genéricos atendem necessidade genéricas, necessidades específicas têm que ser tratadas em separado. É esse o espírito da coisa.

cristianovieira

Mas o que eu estava tentando fazer não tem nenhum vinculo com o dao generico e sim com a anotação do bean que seria, toda vez que aquele relacionamento for atendido ele irá executar a sql restringindo assim o que vem do banco para atender o relacionamento.

Criado 12 de janeiro de 2012
Ultima resposta 13 de jan. de 2012
Respostas 8
Participantes 2