Boa tarde!
Tenho uma aplicação que utiliza o Hibernate e estou precisando melhorar a performance.
Observei que todas as minhas queries estão carregando todos os dados da tabela (Classe mapeada no hibernate),
mas em 99% das vezes só preciso do código e descrição desta Classe.
Gostaria de saber se alguém pode me ajudar a melhorar estas queries para eu ganhar performance no meu sistema
segue abaixo Classe mapeada e DAO
Classe TrFiscal
@Entity
@Table(name = “TR_FISCAL”, catalog = “”, schema = “TRANSPORTE”)
@Data @AllArgsConstructor @NoArgsConstructor
@NamedQueries({@NamedQuery(name = “TrFiscal.findAll”, query = “SELECT f FROM TrFiscal f”)})
public class TrFiscal implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "SEQTR_FISCALFISC_CODIGO", sequenceName = "SE_TR_FISCAL", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQTR_FISCALFISC_CODIGO")
@Basic(optional = false)
@Column(name = "FISC_CODIGO", nullable = false)
private Long fiscCodigo;
@Basic(optional = false)
@Column(name = "FISC_MATRICULA", unique = true, nullable = false)
private Long fiscMatricula;
@JoinColumn(name = “PESS_CODIGO”, referencedColumnName = “PESS_CODIGO”, nullable = false)
@ManyToOne(optional = false, cascade=CascadeType.ALL)
private TrPessoa pessCodigo;
}
Classe TrPessoa
@Entity
@Table(name = “TR_PESSOA”, catalog = “”, schema = “TRANSPORTE”)
@Data @AllArgsConstructor @NoArgsConstructor
public class TrPessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "SEQTR_PESSOAPESS_CODIGO", sequenceName = "SE_TR_PESSOA", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQTR_PESSOAPESS_CODIGO")
@Basic(optional = false)
@Column(name = "PESS_CODIGO", nullable = false)
private Long pessCodigo;
@Basic(optional = false)
@Column(name = "PESS_NOME", nullable = false, length = 100)
private String pessNome;
@Column(name = "PESS_CPF")
private String pessCpf;
// outros campos mapeados
}
Classe TrFiscalDAOImpl
public class TrFiscalDaoImpl extends GenericDao<TrFiscal, Long> implements TrFiscalDao<TrFiscal, Long> {
// outros metodos
@Override
public List listAll() {
DetachedCriteria criterio = DetachedCriteria.forClass(TrFiscal.class, “entidade”);
criterio.createAlias(“entidade.pessCodigo”, “pess”);
criterio.addOrder(Order.asc(“pess.pessNome”));
return findByCriteria(criterio);
}
public static void main(String[] args) throws DaoException {
TrFiscalDaoImpl vDAO = new TrFiscalDaoImpl();
for (Object o : vDAO.listAll()) {
System.out.println(o);
}
}
}
// query gerada pelo BD
SELECT this_.FISC_CODIGO AS FISC1_9_1_,
this_.FISC_MATRICULA AS FISC2_9_1_,
this_.PESS_CODIGO AS PESS3_9_1_,
pess1_.PESS_CODIGO AS PESS1_29_0_,
pess1_.CADA_CODIGO AS CADA2_29_0_,
pess1_.PESS_CNPJ AS PESS3_29_0_,
pess1_.PESS_CPF AS PESS4_29_0_,
pess1_.PESS_FONE AS PESS5_29_0_,
pess1_.PESS_FOTO AS PESS6_29_0_,
pess1_.PESS_LOGIN AS PESS7_29_0_,
pess1_.PESS_NOME AS PESS8_29_0_
FROM TRANSPORTE.TR_FISCAL this_
INNER JOIN TRANSPORTE.TR_PESSOA pess1_
ON this_.PESS_CODIGO=pess1_.PESS_CODIGO
ORDER BY pess1_.PESS_NOME ASC