Erro ao testar Classe de produto

Java

16/05/2011

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 fornecedorpackage 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:
Testsuite: treinamento.dao.ProdutoDaoTestaddProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]populateProdutoInfoTests run: 2, Failures: 0, Errors: 2, Time elapsed: 1,769 sec
------------- Standard Output ---------------addProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]populateProdutoInfo------------- ---------------- ---------------Testcase: testAddProduto(treinamento.dao.ProdutoDaoTest):	Caused an ERRORParâmetro IN ou OUT ausente do índice:: 1java.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 ERRORnulljava.lang.NullPointerException	at treinamento.dao.ProdutoDao.populateProdutoInfo(ProdutoDao.java:67)	at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142)

Test treinamento.dao.ProdutoDaoTest FAILEDtest:Deleting: /tmp/TEST-treinamento.dao.ProdutoDaoTest.xmlBUILD SUCCESSFUL (total time: 2 seconds)

Nilo Souza

Nilo Souza

Curtidas 0

Respostas

Davi Costa

Davi Costa

16/05/2011

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) at treinamento.dao.ProdutoDaoTest.testPopulateProdutoInfo(ProdutoDaoTest.java:142)

Verifica elas, e caso não entenda  erro, posta elas aqui.


att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Outra duvida é: O que tenho que passar dentro do parametro no lugar do "2"?   prd.setIdforn(instanceFornecedor.getFornecedor(2));
GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

Teriamos que ver a classe, pois esse método é de FornecedorDao:


instanceFornecedor.getFornecedor(2)


Att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Davi, a classe fornecedor esta no 1 post.
GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

Não cara se vc perceber é FornecedorDao.
Fornecedor está ok.
Se notar instanceFornecedor é um FornecedorDao

Att Davi
GOSTEI 0
Pjava

Pjava

16/05/2011

Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
@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")})

GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Davi, essa é minha classe fornecedorDao. E quanto as linhas não faço a minima ideia, tb estou aprendendo.

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

GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

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
GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Caro Davi, corrigi o problema no nullpoint, agora deu o seguinte erro:

Testsuite: treinamento.dao.ProdutoDaoTestaddProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 7,985 sec
------------- Standard Output ---------------addProdutoError to try 0 with value treinamento.entidade.Fornecedor[ idforn=2 ]------------- ---------------- ---------------Testcase: testAddProduto(treinamento.dao.ProdutoDaoTest):	Caused an ERRORParâmetro IN ou OUT ausente do índice:: 1java.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 FAILEDtest:Deleting: /tmp/TEST-treinamento.dao.ProdutoDaoTest.xmlBUILD SUCCESSFUL (total time: 9 seconds)

GOSTEI 0
Robson Teixeira

Robson Teixeira

16/05/2011

Favor poste tb a sua classe ProdutoDAO e conforme a mesagem do stackTrace verifique o indice revise o
Parâmetro IN ou OUT ausente do índice
metodo addProduto em ProdutoDAO para ver o erro se naum post ele aqui tb para analisarmos melhor.

att
 robson Passarella

GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Abaixo o que vc pediu, sobre revisar os parametos IN e OUT não sei como fazer.Obrigado desde já!!!

Classe produtoDao
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

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



GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

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

GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Não entendi bem sua explicação. Não entendi o que tem haver o VLR_Unitario e o prd.getIdforn() passa o valor 2.
GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

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
GOSTEI 0
Anthony Accioly

Anthony Accioly

16/05/2011


Uma pergunta em cima de seu post. Eu estou aprendendo java pra valer e gostaria de saber o que significa isso:
@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:

@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
GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

Boa a dica do nosso colega acima, mas ainda estou encucado se vc está usando jdbc.
Posta para gente a classe: GenericaDao

Att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

Com certeza estou usando o jdbc. Minha conexao é com o Oracle 10g, quando chegar em casa a noite, postarei a minha classe GenericaDao.
GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011

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é?
GOSTEI 0
Davi Costa

Davi Costa

16/05/2011

Exato.


Att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

16/05/2011


  Caro Davi e demais colegas, essa etapa funcionou. Agora testarei os outro métodos.Um abraço a todos.
GOSTEI 0
POSTAR