Instanciar classe (view Hibernate) passando parâmetros

Preciso instanciar uma classe java (que na verdade é uma View do BD mapeada no Hibernate) e alguns campos dessa View se repetem, gostaria de instanciar a classe já com a clausura WHERE embutida.

Exemplo:

TaBPreco | Produto | UF | Grupo
xxx1 | y | SP | Normal
xxx2 | y | SP | Normal
xxx3 | y | SP | Normal
xxx2 | y | SP | Diferente
xxx3 | z | SP | Normal
xxx3 | y | SP | Diferente
xxx3 | y | MG | Normal

Quero instanciar o objeto trazendo somente os itens que são da Tabela ‘xxx3’ de ‘SP’ e que seja do grupo NORMAL, no caso , o resultado seria

TaBPreco | Produto | UF | Grupo
xxx3 | y | SP | Normal
xxx3 | z | SP | Normal

Qual a melhor prática pra fazer isso?

Criteria ou Filter (annotations)?

pelo criteria eu consigo retornar um objeto ao invés de um list?

Produto produto = new Produto();
/*Gostaria que a classe produto já fosse instaciada com 2 
  parametros que teria que passar*/

Para trazer só itens de determinada uf/tipo, aplique o filtro direto no query (Tanto criteria qto jql). Para instanciar seu objeto, se for via query vc pode criar um segundo constructor na sua classe e depois fazer

select new br.com.seupacote.Produto(tabpreco, produto) from Tabela where ...

Se for usar criteria, tem que usar o esquema do construct https://stackoverflow.com/questions/47409619/how-to-populate-dto-class-string-fields-using-jpa-criteriaquery-on-entity-having

1 curtida