Eu estou migrando alguns sistemas de php e forms & reports para java.
Em casos em que há uma query que envolve diversas tabelas eu não quero carregar todos os atributos de todas essas tabelas, eu crio uma classe de entidade exclusivamente para receber o resultado da minha query. Por exemplo:
Nesse caso eu criaria a seguinte classe:
@Entity
public class Resultado{
@Column(name="a.atributo1")
private String atributo1;
@Column(name="a.atributo2")
private String atributo2;
@Column(name="b.atributo3")
private String atributo3;
@Column(name="c.atributo4")
private String atributo4;
}
No facade então eu apenas executo uma nativeQuery. Assim consigo obter o resultado e facilmente transmití-lo para o meu managed bean poder usá-lo.
public Resultado findResultado()
{
return (Resultado) em.createNativeQuery("SELECT a.atributo1, a.atributo2, b.atributo3, c.atributo4 FROM a, b, c WHERE (...)", Resultado.class).getSingleResult();
}
Deste modo consigo obter as seguintes vantagens:
[list]Reaproveito queries que já estão prontas SQL (através do nativeQuery). Como consequência levo muito menos tempo na implementação do que se eu tivesse que passar tudo para JPAQL utilizando as entidades do meu banco de dados;[/list]
[list]Retornar um simples objeto para meu managedBean, com todos os atributos facilmente acessíveis através de apenas um get.[/list]
Porém eu estou preocupado se essa seria uma boa prática a longo prazo e gostaria de outras opiniões.
[list]Será que essas entidades não prejudicariam a manutenibilidade do projeto?[/list]
[list]Eu poderia ter algum tipo de problema futuramente?[/list]