Dúvida Select JPA - Hibernate

Tenho esta classe:

@Entity
@Table(name = "clientes")
public class ClientesMOD {

    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;

    @Column(name = "nome", length = 50)
    private String nome;

    @Column(name = "endereco", length = 50)
    private String endereco;
    
    @Column(name = "bairro", length = 50)
    private String bairro;
    
    // construtor, getter e setters

Faço o Select assim: (sei que não preciso usar o SQL nativo, mas quero fazer assim para alguns testes)

String sql = "select id, nome FROM clientes";
entityManager.createNativeQuery(sql, ClientesMOD.class)
List<ClientesMOD> clientes = q.getResultList();

Dá o seguinte erro:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Column name bairro not found in result set.
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289)
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:261)
    at com.softcom.hibernate.dao.ClientesDAO.listar(ClientesDAO.java:23)
    at com.softcom.hibernate.forms.FormPrincipal.btListarActionPerformed(FormPrincipal.java:88)
    at com.softcom.hibernate.forms.FormPrincipal.access$200(FormPrincipal.java:7)
    at com.softcom.hibernate.forms.FormPrincipal$3.actionPerformed(FormPrincipal.java:41)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3322)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)...

O erro acontece porque fiz o select só de id e nome, se eu fizesse o select de todos os campos não daria esse erro. Mas como posso resolver isso? pois neste caso só quero o select de id e nome.

Você está tentando retornar id e nome em ClientesMOD, mas não é possivel, pois o java trata-os como Strings.
Acredito que seja mais fácil trazer todo o ClientesMOD e depois atribuir os valores.

mas se eu trocar:

select id, nome from clientes

por:

select id, nome, endereco, bairro from clientes

funciona perfeitamente… Como posso recuperar só alguns campos com SQL nativo e preencher a lista?

Boa tarde,

Creio que voce tera que fazer um transforme do seu resultado, veja esse link,

campelo.m. Não da certo usar isso, pois estou usando EntityManager(JPA) e não Session(Hibernate)

Jpa tambem tem o transformer!

Eu dei uma pesquisada aqui e não achei os ResultTransformer para JPA

Boa tarde,

segue um exemplo de uso:

Query query = getEntityManagerFactory().createEntityManager().createNativeQuery(hql.toString());
....
query.unwrap(SQLQueryImpl.class).setResultTransformer(new AliasToBeanResultTransformer(ObjectTo.class));
return (ObjectTo) query.getSingleResult();

Sei que é meio antigo esse post, mas acho que posso ajudar.
Sugiro a leitura do livro Java Persistence with Hibernate, segue o link dele:
https://livebook.manning.com/book/java-persistence-with-hibernate/chapter-16/3