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);
}
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?)
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;
}
}