4
respostas

O exercício diz que deveria dar erro mais não deu

Olá pessoal,

o exercício diz que deveria ser lançada a exceção TransientObjectException, porém, não é lançada e simplesmente o Produto é adicionado com a CategoriaId null. Pode isso Arnaldo?!

4 respostas

Olá, Elias!

Você pode postar aqui seus arquivos xml de configuração do NHibernate para analisarmos? Obrigado!

Claro Marcelo já devia ter feito isso. Desculpe.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="LojaWeb" namespace="LojaWeb.Entidades">
  <class name="Produto">
    <id name="Id">
      <generator class="identity"/>
    </id>
    <property name="Nome"/>
    <property name="Preco"/>
    <many-to-one name="Categoria" column="CategoriaId" />
  </class>
</hibernate-mapping>
    public class Produto
    {
        public virtual int Id { get; set; }
        public virtual string Nome { get; set; }
        public virtual decimal Preco { get; set; }
    }
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>    
    <property name="connection.driver_class">
      NHibernate.Driver.SqlClientDriver
    </property>
    <property name="connection.provider">
      NHibernate.Connection.DriverConnectionProvider
    </property>
    <property name="dialect">
      NHibernate.Dialect.MsSql2008Dialect
    </property>
    <property name="connection.connection_string">
      Server=localhost\SQLEXPRESS;Database=Loja;Uid=sa;Pwd=ts@plus#dbase;
    </property>    
    <property name="hbm2ddl.auto">update</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
  </session-factory>
</hibernate-configuration>

Elias, ficou faltando adicionar a propriedade Categoria na classe Produto, como visto no exercício anterior a esse (https://cursos.alura.com.br/course/nhibernate/task/2363)

public class Produto
{
    public virtual int Id { get; set; }

    public virtual string Nome { get; set; }

    public virtual double Preco { get; set; }

    public virtual Categoria Categoria { get; set; }
}

E coloque também o atributo classe no seu xml de configuração:

<many-to-one  column="CategoriaId" name="Categoria" class="Categoria"/>

Boa sorte e boas aulas!

public class Produto
    {
        public virtual int Id { get; set; }

        public virtual string Nome { get; set; }

        public virtual double Preco { get; set; }

        public virtual Categoria Categoria { get; set; }
    }

Eu inseri mais mesmo assim continua sem lançar erros.