Q:

Como fazer select em colunas específicas e continuar recebendo uma lista da entidade e não um array de Object?

Tendo a seguente classe:
  public class Usuario { 
        private Integer id; 
        private Email email;
        private String nome;
        private String sobrenome;
        private String senha;
        private String usuario;
        private List<Grupo> grupos;

        //getters e setters

    }

Para fazer um selct somente nas colunas nome, sobrenome e email eu posso fazer assim:
SELECT u.nome, u.sobrenome, u.email FROM Usuario u

Mas neste caso, eu recebo de volta uma lista de Object[], onde cada posição do array equivale à uma das colunas especificadas.
Mas existe alguma forma de fazer um select desses e retornar uma List de Usuario?

A:

Uma lista de entidade não será possível nesse seu modelo, mas o quê poderá ser feito é criar uma classe com os atributos que você precisa e disponibilizar um construtor com esses atributos. Veja:
public class UsuarioAtributos {
  private String nome;
  private String sobreNome;
  private String email;

public UsuarioAtributos(String nome, String sobreNome, String email) {
    // definir os mapeamentos
}

E na sua consulta você passaria definir dessa forma:
SELECT new meu.pacote.UsuarioAtributos(u.nome, u.sobreNome, u.email) FROM Usuario u

O retorno será uma lista de UsuarioAtributos e não mais um array de Object.

