Olá amigos do guj sou novato a respeito de jpa pois sempre trabalhei com jdbc e agora graças a deus o jpa
esta me ajudando muito, mas estou com duvidas agora no caso, preciso de uma pesquisa que me retorne uma lista
da mesma maneira que utilizava no jdbc mas passando um parâmetro para a pesquisa usando o like
já tenho esse método a duvida é é no resultset.
na linha 14 setCodfrn é o fornecedor ele se relaciona com o produto
como eu seto meu codfrn através do resultset sete
obrigado pela atenção.
public List<Safpro> getLista(String descricao)throws SQLException{
String sql = "select * from safpro where despro like ?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, descricao);
ResultSet rs = stmt.executeQuery();
List<Safpro> proLista = new ArrayList<Safpro>();
while(rs.next()){
Safpro pro = new Safpro();
pro.setCodpro(Long.valueOf(rs.getString("codpro")));
pro.setDespro(rs.getString("despro"));
pro.setCodfrn(rs.get.....("cod"));
proLista.add(pro);
}
rs.close();
stmt.close();
return proLista;
}
Tenho quase certeza que na especificação JPA não existe uma forma de se fazer, uma vez que o framework foi baseado no principio de encapsular o JDBC com tecnologia de baixo nivel. Talvez vc consiga isso, usando alguma extensão proprietária por ai. O JPA retorna array de object nas consultas nativas…não seve ?
De qualquer jeito, a melhor forma de pegar um Resultset é acessando a base na unha via JDBC.
Não sei se eu entendi direito, mas da para fazer consultas com LIKE usando JPA-OQL…se for o motivo ai da coisa…
Pelo que entendi você gostaria de colocar o código do fornecedor no produto que você buscou, correto ?
Bom você poderia fazer assim:
Quando você fez teu select ele buscou o setCodfrn da tabela de produto, se você criou sua classes corretamente, deve sair mais ou menos assim:
Safpro pro = new Safpro(); // Não tem lógica ficar instanciando toda vez um novo objeto dentro do while
Saffrn frn = new Saffrn(); // Não sei o nome da sua classe de fornecedor
while(rs.next()){
pro.setCodpro(Long.valueOf(rs.getString("codpro")));
pro.setDespro(rs.getString("despro"));
frn.setCodfrn(rs.getInt("codfrn"))
pro.setFornecedor(frn);
proLista.add(pro);
}
Obrigado pessoal antenção mais uma vez é que pra mim a especificação jpa ainda é meio obscura e tenho muito que aprender
uma vez eu vi que o jpa trazia os objetos completos que relacionasse com ele
dessa forma consigo trazer apenas os codigo do fornecedor quando preciso tbem da descrição e marca
e o produto tem varios outros objetos
dessa forma que nosso amigo me disse funcionou mas vem apenas o código
public List<Safpro> getLista(String descricao)throws SQLException{
String sql = "select * from safpro where despro like ?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, descricao);
ResultSet rs = stmt.executeQuery();
List<Safpro> proLista = new ArrayList<Safpro>();
Safpro pro = new Safpro();
Saffrn frn = new Saffrn();
while(rs.next()){
pro.setCodpro(Long.valueOf(rs.getString("codpro")));
pro.setDespro(rs.getString("despro"));
frn.setCod(rs.getInt("CODFRN"));
pro.setCodfrn(frn);
proLista.add(pro);
}
rs.close();
stmt.close();
return proLista;
}
É que você tem que fazer a busca completa, no seu caso você esta buscando todos os campos da tabela de produtos, que contem somente o id do fornecedor, para buscar as demais informações do fornecedor você deve fazer um join com a tabela fornecedor e buscar também as informações do dele.
No código java não vai mudar muito, você só adicionar popula o objeto fornecedor e coloca na classe produto como você fez com o codigo do fornecedor.
Obrigado Rodrigo !!!
fiz da maneira q o Rodrigo sugeriu
ta funcionando
mas esta estrutura fica legal ? ou não tem problema ?
não sei mais vou dar por Resolvido.
public List<Safpro> getLista(String descricao)throws SQLException{
String sql = " SELECT * FROM safpro"+
" inner join saffrn f on safpro.CODFRN = f.COD"+
" inner join safuni u on safpro.CODUNI = u.COD"+
" inner join safcve c on safpro.CODCVE = c.CODCVE"+
" inner join safgpr g on safpro.CODGPR = g.CODGPR"+
" WHERE DESPRO LIKE ?";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setString(1, descricao);
ResultSet rs = stmt.executeQuery();
List<Safpro> proLista = new ArrayList<Safpro>();
Safpro pro = new Safpro();
Saffrn frn = new Saffrn();
Safuni uni = new Safuni();
Safcve cve = new Safcve();
Safgpr gpr = new Safgpr();
while(rs.next()){
pro.setCodpro(Long.valueOf(rs.getString("codpro")));
pro.setDespro(rs.getString("despro"));
frn.setCod(rs.getInt("CODFRN"));
frn.setNme(rs.getString("NME"));
pro.setCodfrn(frn);
uni.setCod(rs.getInt("u.COD"));
uni.setNme(rs.getString("u.NME"));
pro.setCoduni(uni);
cve.setCodcve(rs.getInt("c.CODCVE"));
cve.setDescve(rs.getString("c.DESCVE"));
pro.setCodcve(cve);
gpr.setCodgpr(rs.getInt("g.CODGPR"));
gpr.setDesgpr(rs.getString("g.DESGPR"));
pro.setCodgpr(gpr);
proLista.add(pro);
}
rs.close();
stmt.close();
return proLista;
}