While (rs.next())

Bom dia, pessoal.

Uma dúvida…

Eu tenho um preparedstatement que tem um inner join
Como eu seto eles dentro da minha condicao while?

    PreparedStatement st = cn.prepareStatement("SELECT ct.customer_name FROM changes c "
        + "INNER JOIN customer ct ON c.id_customer = ct.id_customer WHERE ct.customer_name='Barcelona'");
    rs = st.executeQuery();
    lista = new ArrayList();
    
    while (rs.next()) {
        Changes chg = new Changes();
        chg.set???
        lista.add(chg);
    }

customer declarado no model de changes

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name=“id_customer”)
private Customer customer;

Primeiro ponto é que vc não precisa fazer esse join na sua jpql e nem declarar o fetch type no seu relacionamento, pois todo relecionamento …ToOne é EAGER por padrão. Se é EAGER por padrão, ele vai trazer o Customer automaticamente.

Altere sua JPQL para

select c.customer.name from Change c where c.customer.name = 'Barcelona'

Certifique-se de usar o nome da classe correta vinculada ao alias c (changes, Change, Changes?)

pra pegar o valor no resultset, use

rs.getString(1);

logo:

chg.setName(rs.getString(1));

1 curtida

A fins de aprendizado para @rafa120 além das dicas do @raphaeloneves você também pode fazer desta forma

rs.getString(“c.customer.name”);

Obrigado pelas dicas! Vou dar uma olhada e arrumar essa questao do EAGER

Mas quanto ao resultset que está estranho ainda

Mas estou fazendo um select de customer_name da tabela changes, porem nao tenho este campo la… nunca vai dar certo, acredito eu
oq tenho eh id_customer
entao nao consigo fazer um setName ou setCustomerName…somente setCustomer que pede um retorno de objeto

Estou fazendo isso para gerar graficos com o primefaces. Já consegui fazer funcionar com outro SQL e resultset, mas somente com dados de uma tabela, sem ter o “inner join”

A classe completa:

public class ChangesDaoImplCharts {
    
    public List<Changes> listar() {
    
        List<Changes> lista = null;
        ResultSet rs;
        Connection cn = null;
        
        
         try {
            Class.forName("com.mysql.jdbc.Driver");
            cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/meu_banco?user=root&password=root");
            
            PreparedStatement st = cn.prepareStatement("SELECT c customer_name FROM changes c WHERE c.customer_name='Barcelona'");
            rs = st.executeQuery();
            lista = new ArrayList();
            
            while (rs.next()) {
                Changes chg = new Changes();
                //chg.setCustomer(rs.getObject("customer_name"));
                        
                lista.add(chg);
            }
            rs.close();
         } catch (Exception e) {
             System.out.println("Error: "+e);
         } finally {
             if (cn != null) {
                 try {
                     cn.close();
                 } catch (SQLException ex) {
                     Logger.getLogger(CustomerDaoImplCharts.class.getName()).log(Level.SEVERE, null, ex);
                 }
             }
         }
         return lista;
     }
}