Como o hibernate funciona com a consulta HQL se o Transformer não for declarado explicitamente

Eu não sei onde posso encontrar o mecanismo de implementação do hibernate. Eu tenho muitas perguntas sobre o modo de hibernação, mas podemos iniciá-las a partir desta:

Se houver um HQL assim:

from B b where bx =: x and by =: y 

E o código de consulta assim:

 Query query = session.createQuery(hql.toString()); 

Qual é o transformador padrão para definir todos os campos em B? Eu achei isso mesmo não precisa setter ou getter para definir valores.

Ou digamos, qual é a diferença entre ele e este:

 Query query = session.createQuery(hql.toString()).setResultTransformer(Transformers.aliasToBean(B.class)); 

Obrigado por ler isto e quaisquer ideias são bem vindas.

Quando o Transformer padrão usado, ele espera que a class seja entidade de hibernação, o que significa que ela deve ser mapeada com alguma tabela e, no segundo caso, que é

 Query query=session.createQuery(hql.toString()).setResultTransformer(Transformers.aliasToBean(B.class)); 

B não é entidade de hibernação (não mapeado para qualquer tabela seu POJO simples sem nenhuma anotação específica de hibernação)

Por exemplo, há momentos em que temos uma class, gostaríamos de preencher com dados de acordo com os dados retornados de uma consulta. A class é um POJO simples e não uma entidade do Hibernate, então o Hibernate não irá reconhecer esta class. Isso pode ser feito no Hibernate usando Transformers. Vamos dar uma olhada em um exemplo simples, mostrando como os Transformers podem ser usados. Primeiro, vamos dar uma olhada em uma simples class POJO chamada: “UserActivityStat”. Esta class contém algumas informações statistics. Gostaríamos de preencher as informações statistics de uma instância diretamente da execução de um HQL do Hibernate.

 public static class UserActivityStat{ private int totalPhotos; private int totalViews; public UserActivityStat() { } public int getTotalPhotos() { return totalPhotos; } public void setTotalPhotos(int totalPhotos) { this.totalPhotos = totalPhotos; } public int getTotalViews() { return totalViews; } public void setTotalViews(int totalViews) { this.totalViews = totalViews; } } 

Agora, vamos dar uma olhada em um método simples, que usa a hibernação HQL e a class Transformers para preencher a instância “UserActivityStat” com dados

 public UserActivityStat getUserActivityStat(User user) { return (UserActivityStat) hibernateSession.createQuery( "select count(*) as totalPhotos, sum(p.views) as totalViews " + "from Photo p " + "where p.user = :user " + "p.dateCreated <= :now") .setParameter("user", user) .setTimestamp("now", new Date()) .setResultTransformer(Transformers.aliasToBean(UserActivityStat.class)) .uniqueResult(); } 

Note que cada uma das duas colunas tem um alias. Esse alias deve ser o nome da propriedade na class “UserActivityStat”. Observe também o uso do “setResultTransformer” ao longo da class “Transformers”.