Autor
Mensagem
Conforme pedido, estas são minhas classes. Desde já abrigado!
Classe Produto
package treinamento.entidade;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author nsouza
*/
@Entity
@Table(name = "PRODUTO")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Produto.findAll", query = "SELECT p FROM Produto p"),
@NamedQuery(name = "Produto.findByIdProduto", query = "SELECT p FROM Produto p WHERE p.idProduto = :idProduto"),
@NamedQuery(name = "Produto.findByNome", query = "SELECT p FROM Produto p WHERE p.nome = :nome"),
@NamedQuery(name = "Produto.findByVlrUnitario", query = "SELECT p FROM Produto p WHERE p.vlrUnitario = :vlrUnitario"),
@NamedQuery(name = "Produto.findByQtdeEstoque", query = "SELECT p FROM Produto p WHERE p.qtdeEstoque = :qtdeEstoque")})
public class Produto implements Serializable {
@OneToMany(mappedBy = "idProduto")
private Collection<Saida> saidaCollection;
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ID_PRODUTO")
private Integer idProduto;
@Column(name = "NOME")
private String nome;
// @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
@Column(name = "VLR_UNITARIO")
private Float vlrUnitario;
@Column(name = "QTDE_ESTOQUE")
private Integer qtdeEstoque;
@JoinColumn(name = "IDFORN", referencedColumnName = "IDFORN")
@ManyToOne
private Fornecedor idforn;
public Produto() {
}
public Produto(Integer idProduto) {
this.idProduto = idProduto;
}
public Integer getIdProduto() {
return idProduto;
}
public void setIdProduto(Integer idProduto) {
this.idProduto = idProduto;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Float getVlrUnitario() {
return vlrUnitario;
}
public void setVlrUnitario(Float vlrUnitario) {
this.vlrUnitario = vlrUnitario;
}
public Integer getQtdeEstoque() {
return qtdeEstoque;
}
public void setQtdeEstoque(Integer qtdeEstoque) {
this.qtdeEstoque = qtdeEstoque;
}
public Fornecedor getIdforn() {
return idforn;
}
public void setIdforn(Fornecedor idforn) {
this.idforn = idforn;
}
@Override
public int hashCode() {
int hash = 0;
hash += (idProduto != null ? idProduto.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Produto)) {
return false;
}
Produto other = (Produto) object;
if ((this.idProduto == null && other.idProduto != null) || (this.idProduto != null && !this.idProduto.equals(other.idProduto))) {
return false;
}
return true;
}
@Override
public String toString() {
return "treinamento.entidade.Produto[ idProduto=" + idProduto + " ]";
}
@XmlTransient
public Collection<Saida> getSaidaCollection() {
return saidaCollection;
}
public void setSaidaCollection(Collection<Saida> saidaCollection) {
this.saidaCollection = saidaCollection;
}
}
Classe fornecedor
package treinamento.entidade;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/**
*
* @author nsouza
*/
@Entity
@Table(name = "FORNECEDOR")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Fornecedor.findAll", query = "SELECT f FROM Fornecedor f"),
@NamedQuery(name = "Fornecedor.findByIdforn", query = "SELECT f FROM Fornecedor f WHERE f.idforn = :idforn"),
@NamedQuery(name = "Fornecedor.findByNome", query = "SELECT f FROM Fornecedor f WHERE f.nome = :nome"),
@NamedQuery(name = "Fornecedor.findByEndereco", query = "SELECT f FROM Fornecedor f WHERE f.endereco = :endereco"),
@NamedQuery(name = "Fornecedor.findByNumero", query = "SELECT f FROM Fornecedor f WHERE f.numero = :numero"),
@NamedQuery(name = "Fornecedor.findByComplemento", query = "SELECT f FROM Fornecedor f WHERE f.complemento = :complemento"),
@NamedQuery(name = "Fornecedor.findByBairro", query = "SELECT f FROM Fornecedor f WHERE f.bairro = :bairro"),
@NamedQuery(name = "Fornecedor.findByCidade", query = "SELECT f FROM Fornecedor f WHERE f.cidade = :cidade"),
@NamedQuery(name = "Fornecedor.findByInscEstadual", query = "SELECT f FROM Fornecedor f WHERE f.inscEstadual = :inscEstadual"),
@NamedQuery(name = "Fornecedor.findByTelefone", query = "SELECT f FROM Fornecedor f WHERE f.telefone = :telefone"),
@NamedQuery(name = "Fornecedor.findByEmail", query = "SELECT f FROM Fornecedor f WHERE f.email = :email")})
public class Fornecedor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "IDFORN")
private Integer idforn;
@Column(name = "NOME")
private String nome;
@Column(name = "ENDERECO")
private String endereco;
@Column(name = "NUMERO")
private Integer numero;
@Column(name = "COMPLEMENTO")
private String complemento;
@Column(name = "BAIRRO")
private String bairro;
@Column(name = "CIDADE")
private String cidade;
@Column(name = "INSC_ESTADUAL")
private Integer inscEstadual;
@Column(name = "TELEFONE")
private String telefone;
@Column(name = "EMAIL")
private String email;
@OneToMany(mappedBy = "idforn")
private Collection<Produto> produtoCollection;
public Fornecedor() {
}
public Fornecedor(Integer idforn) {
this.idforn = idforn;
}
public Integer getIdforn() {
return idforn;
}
public void setIdforn(Integer idforn) {
this.idforn = idforn;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Integer getNumero() {
return numero;
}
public void setNumero(Integer numero) {
this.numero = numero;
}
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public Integer getInscEstadual() {
return inscEstadual;
}
public void setInscEstadual(Integer inscEstadual) {
this.inscEstadual = inscEstadual;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@XmlTransient
public Collection<Produto> getProdutoCollection() {
return produtoCollection;
}
public void setProdutoCollection(Collection<Produto> produtoCollection) {
this.produtoCollection = produtoCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (idforn != null ? idforn.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Fornecedor)) {
return false;
}
Fornecedor other = (Fornecedor) object;
if ((this.idforn == null && other.idforn != null) || (this.idforn != null && !this.idforn.equals(other.idforn))) {
return false;
}
return true;
}
@Override
public String toString() {
return "treinamento.entidade.Fornecedor[ idforn=" + idforn + " ]";
}
}
Testes
@Test
public void testAddProduto() throws Exception {
System.out.println("addProduto");
Fornecedor forn = new Fornecedor();
forn.setNome("Andorra");
forn.setEndereco("romano cruz");
forn.setNumero(2201);
forn.setComplemento("apt 21");
forn.setBairro("bairu");
forn.setCidade("caatinga");
forn.setInscEstadual(97143000);
forn.setTelefone("323327656");
forn.setEmail("mario@gmail.com");
FornecedorDao instanceFornecedor = new FornecedorDao();
instanceFornecedor.addFornecedor(forn);
Produto prd = new Produto();
prd.setIdforn(instanceFornecedor.getFornecedor(2));
prd.setNome("camisa");
prd.setVlrUnitario(10f);
prd.setQtdeEstoque(50);
ProdutoDao instance = new ProdutoDao();
instance.addProduto(prd);
}
Mensagem de erro:
#Código
Testsuite: treinamento.dao.ProdutoDaoTest
addProduto
Error to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]
populateProdutoInfo
Tests run: 2, Failures: 0, Errors: 2, Time elapsed: 1,769 sec
------------- Standard Output ---------------
addProduto
Error to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]
populateProdutoInfo
------------- ---------------- ---------------
Testcase: testAddProduto(treinamento.dao.ProdutoDaoTest): Caused an ERROR
Parâmetro IN ou OUT ausente do índice:: 1
java.sql.SQLException: Parâmetro IN ou OUT ausente do índice:: 1
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1821)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
at treinamento.dao.GenericaDao.executeCommand(GenericaDao.java:63)
at treinamento.dao.ProdutoDao.addProduto(ProdutoDao.java:31)
at treinamento.dao.ProdutoDaoTest.testAddProduto(ProdutoDaoTest.java:73)
Testcase: testPopulateProdutoInfo(treinamento.dao.ProdutoDaoTest): Caused an ERROR
null
java.lang.NullPointerException
at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67)
at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142)
Test treinamento.dao.ProdutoDaoTest FAILED
test:
Deleting: /tmp/TEST-treinamento.dao.ProdutoDaoTest.xml
BUILD SUCCESSFUL (total time: 2 seconds)
Já percebi que idFornecedor realmente é um objeto fornecedor. (seria interessante depois alterar na classe Produto, com o atributo desse modo gera dúvida, não é bom quando se trabalha em equipe)
Bom vamos ao erro, o que está acontecendo é um nullpointer nas Classes ProdutoDao e ProdutoDaoTest, mais especificamente nas linhas:
at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67)
Verifica elas, e caso não entenda erro, posta elas aqui.
att Davi
Bom vamos ao erro, o que está acontecendo é um nullpointer nas Classes ProdutoDao e ProdutoDaoTest, mais especificamente nas linhas:
at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67)
at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142)
Verifica elas, e caso não entenda erro, posta elas aqui.
att Davi
Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
#Código
@XmlRootElement --> Essa linha e as de baixo
@NamedQueries({
@NamedQuery(name = "Fornecedor.findAll", query = "SELECT f FROM Fornecedor f"),
@NamedQuery(name = "Fornecedor.findByIdforn", query = "SELECT f FROM Fornecedor f WHERE f.idforn = :idforn"),
@NamedQuery(name = "Fornecedor.findByNome", query = "SELECT f FROM Fornecedor f WHERE f.nome = :nome"),
@NamedQuery(name = "Fornecedor.findByEndereco", query = "SELECT f FROM Fornecedor f WHERE f.endereco = :endereco"),
@NamedQuery(name = "Fornecedor.findByNumero", query = "SELECT f FROM Fornecedor f WHERE f.numero = :numero"),
@NamedQuery(name = "Fornecedor.findByComplemento", query = "SELECT f FROM Fornecedor f WHERE f.complemento = :complemento"),
@NamedQuery(name = "Fornecedor.findByBairro", query = "SELECT f FROM Fornecedor f WHERE f.bairro = :bairro"),
@NamedQuery(name = "Fornecedor.findByCidade", query = "SELECT f FROM Fornecedor f WHERE f.cidade = :cidade"),
@NamedQuery(name = "Fornecedor.findByInscEstadual", query = "SELECT f
FROM Fornecedor f WHERE f.inscEstadual = :inscEstadual"),
@NamedQuery(name = "Fornecedor.findByTelefone", query = "SELECT f FROM Fornecedor f WHERE f.telefone = :telefone"),
@NamedQuery(name = "Fornecedor.findByEmail", query = "SELECT f FROM Fornecedor f WHERE f.email = :email")})
Davi, essa é minha classe fornecedorDao. E quanto as linhas não faço a minima ideia, tb estou aprendendo.
#Código
package treinamento.dao;
import java.util.logging.Level;
import java.util.logging.Logger;
import treinamento.entidade.Fornecedor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.awt.List;
/**
*
* @author nsouza
*/
public class FornecedorDao extends GenericaDao{
public FornecedorDao(){
}
public void addFornecedor(Fornecedor frn){
try {
String sql = "insert into fornecedor (nome,endereco,numero,complemento,bairro,cidade,"
+ "insc_estadual,telefone,email) values(?,?,?,?,?,?,?,?,?)";
executeCommand(sql, frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro(),
frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail());
} catch (SQLException ex) {
Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Fornecedor getFornecedor(int idForn) throws SQLException {
ResultSet rs = executeQuery("SELECT * FROM Fornecedor WHERE IDForn = ?", idForn);
Fornecedor usr = null;
if (rs.next()) {
usr = populateFornecedorInfo(rs);
}
rs.close();
return usr;
}
public void updateFornecedor(Fornecedor frn){
try {
String sql = "UPDATE Fornecedor SET nome=?, endereco=?, numero=?,complemento=?,bairro=?,cidade=?,"
+ "insc_estadual=?,telefone=?,email=? WHERE IDForn = ?";
executeCommand(sql, frn.getNome(),frn.getEndereco(),frn.getNumero(),frn.getComplemento(),frn.getBairro()
+ frn.getCidade(),frn.getInscEstadual(),frn.getTelefone(),frn.getEmail(),frn.getIdforn());
} catch (SQLException ex) {
Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void revomeFornecedor(int idForn) {
try {
executeCommand("DELETE FROM Fornecedor WHERE IDForn = ?", idForn);
} catch (SQLException ex) {
Logger.getLogger(FornecedorDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
public LinkedList<Fornecedor> getAllFornecedor() throws SQLException {
ResultSet rs = executeQuery("SELECT * FROM Fornecedor");
LinkedList<Fornecedor> toReturn = new LinkedList<Fornecedor>();
while (rs.next()) {
toReturn.add(populateFornecedorInfo(rs));
}
rs.close();
return toReturn;
}
public static Fornecedor populateFornecedorInfo(ResultSet rs) throws SQLException {
Fornecedor toReturn = new Fornecedor();
toReturn.setIdforn(rs.getInt("IDFORN"));
toReturn.setNome(rs.getString("NOME"));
toReturn.setEndereco(rs.getString("ENDERECO"));
toReturn.setNumero(rs.getInt("NUMERO"));
toReturn.setComplemento(rs.getString("COMPLEMENTO"));
toReturn.setBairro(rs.getString("BAIRRO"));
toReturn.setCidade(rs.getString("CIDADE"));
toReturn.setInscEstadual(rs.getInt("INSC_ESTADUAL"));
toReturn.setTelefone(rs.getString("TELEFONE"));
toReturn.setEmail(rs.getString("EMAIL"));
return toReturn;
}
}
Pelo método:
Percebi que ele retorna o Fornecedor pelo id.
Para ver o número das linhas, se tiver usando eclipse, vai no canto esquerdo da classe (*.java) e clica com o botão direito e seleciona a opção show numbers. No netbenas tb é parecido, a opção para aparecer as linhas não é identico , mas é bem parecido.
Não se esqueça que o erro está acontecendo é um NullPointerException nas classes ProdutoDao e ProdutoDaoTest.
Em um post anterior citei até as linhas.
Att Davi
Percebi que ele retorna o Fornecedor pelo id.
Para ver o número das linhas, se tiver usando eclipse, vai no canto esquerdo da classe (*.java) e clica com o botão direito e seleciona a opção show numbers. No netbenas tb é parecido, a opção para aparecer as linhas não é identico , mas é bem parecido.
Não se esqueça que o erro está acontecendo é um NullPointerException nas classes ProdutoDao e ProdutoDaoTest.
Em um post anterior citei até as linhas.
Att Davi
Caro Davi, corrigi o problema no nullpoint, agora deu o seguinte erro:
#Código
Testsuite: treinamento.dao.ProdutoDaoTest
addProduto
Error to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 7,985 sec
------------- Standard Output ---------------
addProduto
Error to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]
------------- ---------------- ---------------
Testcase: testAddProduto(treinamento.dao.ProdutoDaoTest): Caused an ERROR
Parâmetro IN ou OUT ausente do índice:: 1
java.sql.SQLException: Parâmetro IN ou OUT ausente do índice:: 1
at oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:1821)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3571)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3657)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
at treinamento.dao.GenericaDao.executeCommand(GenericaDao.java:63)
at treinamento.dao.ProdutoDao.addProduto(ProdutoDao.java:31)
at treinamento.dao.ProdutoDaoTest.testAddProduto(ProdutoDaoTest.java:72)
Test treinamento.dao.ProdutoDaoTest FAILED
test:
Deleting: /tmp/TEST-treinamento.dao.ProdutoDaoTest.xml
BUILD SUCCESSFUL (total time: 9 seconds)
Abaixo o que vc pediu, sobre revisar os parametos IN e OUT não sei como fazer.
Obrigado desde já!!!
Classe produtoDao
#Código
package treinamento.dao;
import treinamento.entidade.Produto;
import treinamento.dao.FornecedorDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
/**
*
* @author Nilo
*/
public class ProdutoDao extends GenericaDao{
private static final long serialVersionUID = 1L;
public ProdutoDao(){
}
public void addProduto(Produto prd) throws SQLException {
//usr.setId(getNextId("ProdutoS"));
String sql = "INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE) values (?,?,?,?)";
executeCommand(sql, prd.getIdforn(), prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque());
}
public void removeProduto(int idProduto) throws SQLException {
executeCommand("DELETE FROM Produto WHERE IDProduto = ?", idProduto);
}
public void updateProduto(Produto prd) throws SQLException {
String sql = "UPDATE Produto SET IDFOR=?,NOME=?,VLR_UNITARIO=?,QTDE_ESTOQUE=? where ID_PRODUTO=?";
executeCommand(sql, prd.getIdforn(),prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque(),prd.getIdProduto());
}
public Produto getProduto(int idProduto) throws SQLException {
ResultSet rs = executeQuery("SELECT * FROM Produto WHERE ID_Produto = ?", idProduto);
Produto usr = null;
if (rs.next()) {
usr = populateProdutoInfo(rs);
}
rs.close();
return usr;
}
public List<Produto> getAllProdutos() throws SQLException {
ResultSet rs = executeQuery("SELECT * FROM Produto");
List<Produto> toReturn = new LinkedList<Produto>();
while (rs.next()) {
toReturn.add(populateProdutoInfo(rs));
}
rs.close();
return toReturn;
}
public static Produto populateProdutoInfo(ResultSet rs) throws SQLException {
Produto toReturn = new Produto();
FornecedorDao FornDao = new FornecedorDao();
toReturn.setIdProduto(rs.getInt("ID_PRODUTO"));
toReturn.setIdforn(FornDao.getFornecedor(rs.getInt("IDFORN")));
toReturn.setNome(rs.getString("NOME"));
toReturn.setVlrUnitario(rs.getFloat("VLR_UNITARIO"));
toReturn.setQtdeEstoque(rs.getInt("QTDE_ESTOQUE"));
return toReturn;
}
METODO addProduto
#Código
@Test
public void testAddProduto() throws Exception {
System.out.println("addProduto");
Fornecedor forn = new Fornecedor();
forn.setNome("Andorra");
forn.setEndereco("Californai");
forn.setNumero(201);
forn.setComplemento("apt 21");
forn.setBairro("caburiu");
forn.setCidade("lavras");
forn.setInscEstadual(97143000);
forn.setTelefone("3258156");
forn.setEmail("nicolas@gmail.com");
FornecedorDao instanceFornecedor = new FornecedorDao();
instanceFornecedor.addFornecedor(forn);
Produto prd = new Produto();
prd.setIdforn(instanceFornecedor.getFornecedor(2));
prd.setNome("camisa");
prd.setVlrUnitario(10f);
prd.setQtdeEstoque(50);
ProdutoDao instance = new ProdutoDao();
instance.addProduto(prd);
}
Seguinte, desconfio um pouco desse sql:
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
Seguinte vc está usando JPA, como ele é framework ORM, ele facilita muito a nossa vida.
Mas na hora de montar suas consultas ele não usa sql nativão, ele usa JPQL que é bem parecido.
Ao invez de utilizar esse String
String sql = "INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE) values (?,?,?,?)"
Vc deve substituir por:
String sql = "INSERT INTO PRODUTO (idforn,NOME,vlrUnitario,qtdeEstoque) values (?,?,?,?)"
É assim que o JPQL funciona ou se tiver usando Hibernate HQl e por aí vai....
ele já inteligente o bastante para saber que esses atributos são relativos as colunas que vc mapeou nas suas entidades.
Vamos ver se com essa correção o erro ainda vai continuar.
Agora vendo seu código com mais calma percebi que vc está usando jdbc em uma consulta e não JPA.
Esse método :
executeCommand(sql, prd.getIdforn(), prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque());
Usa jdbc pq se for, esquece o que falei de JPQL.
Se ele realmente usar jdbc seria interessante vc copiar toda a query gerada pelo sua String sql e tentgarrodar no seu próprio banco para ver que erro acontece lá.
Outra coisa se estiver usando jdbc puro esse prd.getIdForn() retorna um objeto e não o id do fornecedor, vc deveria fazer o seguinte:
prd.getIdforn().getIdforn()
Aí sim tem o id do fornecedor para vc usar no seu insert.
Att Davi
Mas na hora de montar suas consultas ele não usa sql nativão, ele usa JPQL que é bem parecido.
Ao invez de utilizar esse String
String sql = "INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE) values (?,?,?,?)"
Vc deve substituir por:
String sql = "INSERT INTO PRODUTO (idforn,NOME,vlrUnitario,qtdeEstoque) values (?,?,?,?)"
É assim que o JPQL funciona ou se tiver usando Hibernate HQl e por aí vai....
ele já inteligente o bastante para saber que esses atributos são relativos as colunas que vc mapeou nas suas entidades.
Vamos ver se com essa correção o erro ainda vai continuar.
Agora vendo seu código com mais calma percebi que vc está usando jdbc em uma consulta e não JPA.
Esse método :
executeCommand(sql, prd.getIdforn(), prd.getNome(),prd.getVlrUnitario(),prd.getQtdeEstoque());
Usa jdbc pq se for, esquece o que falei de JPQL.
Se ele realmente usar jdbc seria interessante vc copiar toda a query gerada pelo sua String sql e tentgarrodar no seu próprio banco para ver que erro acontece lá.
Outra coisa se estiver usando jdbc puro esse prd.getIdForn() retorna um objeto e não o id do fornecedor, vc deveria fazer o seguinte:
prd.getIdforn().getIdforn()
Aí sim tem o id do fornecedor para vc usar no seu insert.
Att Davi
Citação:
Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
#Código
@XmlRootElement --> Essa linha e as de baixo
PJava,
Em geral eu não recomendo sub-perguntas nos chamados de outras pessoas (é melhor que você abra uma nova pergunta para que outras pessoas possam fazer buscas no fórum e se se beneficiar das respostas mais facilmente).
Porém, abrindo um exceção, aqui vai uma explicação rápida:
Porém, abrindo um exceção, aqui vai uma explicação rápida:
@XmlRootElement : Tem haver com binding de XML na especificação JAXB, quando você quer transformar uma classe em XML e vice-versa. De uma olhada no Javadoc dela aqui: http://download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRootElement.html
Quanto as named queries, elas são anotações que permitem definir queries "reaproveitáveis". Você dá um nome para a query e pode recuperá-la através desse nome ao invés de ter que forçar a barra repetindo o JPQL várias vezes. Algumas implementações aproveitam para para fazer algumas otimizações (por exemplo, deixar a query preparada de antemão) que também podem trazer melhorias de performance.
Eis um pequeno artigo em português sobre elas: http://javasemcafe.blogspot.com/2011/04/jpa-20-utilizando-os-namedquery.html
E eis os javadocs: http://download.oracle.com/javaee/6/api/javax/persistence/NamedQuery.html
Citação:
Seguinte, desconfio um pouco desse sql:
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
Seguinte, desconfio um pouco desse sql:
INSERT INTO PRODUTO (IDFORN,NOME,VLR_UNITARIO,QTDE_ESTOQUE
Como está usando JPA, ao invés de VLR_UNITARIO, vc deve passar o atributo que vc mapeou que é vlrUnitario.
Confere isso para todos os sql.
Além disso, pode ser que vc ao corrigir isso ainda dê o erro,
então confere se :
prd.getIdforn()
Retorna algum valor, pq se ele estiver vindo nulo, não deveria estar nesse sql.
Espero ter ajudado
Att Davi
O prd.getIdforn().getIdForn() eu coloco dentro da comand certo? E só substituir né?







