Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Erro aula 2 - Inserindo um objeto - Additional information: could not insert: [loja.Entidades.Produto][SQL: INSERT INTO Produto (Nome, Preco) VALUES (?, ?); SELECT LAST_INSERT_ID()]

Olá pessoal, tudo bem ? Alguém sabe como resolver esse problema, pois segui a mesma codificação da criação do mapeamento do Usuario, e para o Produto não deu certo. Obrigado, Erro

An unhandled exception of type 'NHibernate.Exceptions.GenericADOException' occurred in NHibernate.dll

Additional information: could not insert: [loja.Entidades.Produto][SQL: INSERT INTO Produto (Nome, Preco) VALUES (?, ?);
SELECT LAST_INSERT_ID()]

Produto.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="loja" namespace="loja.Entidades">

  <class name="Produto">
    <id name="Id">
      <generator class="identity"/>
    </id>
    <property name="Nome" />
    <property name="Preco" />

  </class>

</hibernate-mapping>

Produto.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace loja.Entidades
{
    public class Produto
    {
        public virtual int Id { get; set; }
        public virtual string Nome { get; set; }
        public virtual double Preco { get; set; }
    }
}

ProdutoDAO.cs

using loja.Entidades;
using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace loja.DAO
{
    public class ProdutoDAO
    {
        private ISession session;

        public ProdutoDAO(ISession session)
        { // construtor
            this.session = session;
        }

        public void Adiciona(Produto produto)
        {
            ITransaction transacao = session.BeginTransaction();
            session.Save(produto);  //  **** erro acontece aqui ****
            transacao.Commit();
        }

        public Produto BuscaPorId(int id)
        {
            return session.Get<Produto>(id);
        }

    }
}
4 respostas

Cesar, esse erro acontece quando você tenta inserir um produto, certo? Onde você está preenchendo este produto e chamando o DAO? Poderia colocar o código?

Bom dia Gabriel! Segue o código:

using loja.DAO;
using loja.Entidades;
using loja.Infra;
using NHibernate;
using NHibernate.Cfg;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace loja
{
    class Program
    {
        static void Main(string[] args)
        {   

            ISession session = NHibernateHelper.AbreSession();

            ProdutoDAO produtoDao = new ProdutoDAO(session);
            Produto novoProduto = new Produto();
            novoProduto.Nome = "Teclado";
            novoProduto.Preco = 20.0;
            produtoDao.Adiciona(novoProduto);

            session.Close();

            Console.Read();
        }
    }
}
solução!

Cesar, não parece ter nada errado no seu código, mas essa Exception que está dando não ajuda muito, ela é muito genérica.

Coloca seu código assim:

try
{
           ISession session = NHibernateHelper.AbreSession();

            ProdutoDAO produtoDao = new ProdutoDAO(session);
            Produto novoProduto = new Produto();
            novoProduto.Nome = "Teclado";
            novoProduto.Preco = 20.0;
            produtoDao.Adiciona(novoProduto);

            session.Close();

            Console.Read();
}
catch(Exception ex)
{
    Console.log(ex.InnerException);
}

E cola pra gente o erro que aparecer.

Gabriel, estava faltando o código abaixo:

NHibernateHelper.GeraSchema();

Obrigado pela atenção,

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software