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

Aula 04. HQL gera SQL inválido porque não inclui a coluna Id da tabela Categoria no GROUP BY.

A HQL:

 "select p.Categoria as Categoria, count(p) as NumeroDePedidos from Produto p group by p.Categoria"

gera a Exception

 "SqlException: A coluna 'Categoria.Id' é inválida na lista de seleção porque não está contida em uma função de agregação nem na cláusula GROUP BY."

E com isso não consigo avançar no curso. Como faço para que o NHibernate faça o agrupamento corretamente e traga a lista de entidades da forma como o Victor demonstra no vídeo?

Estou utilizando o SQL Server 2012 para o curso.

Os .XML utilizados.:

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"/>
    <many-to-one name="Categoria" column="CategoriaId" class="Categoria" not-null="true" fetch="join"/>
  </class>
</hibernate-mapping>

Categoria.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Loja"
                   namespace="Loja.Entidades">`
  <class name="Categoria">

    <id name="Id">
      <generator class="identity"/>
    </id>
    <property name="Nome"/>
    <!--propriedade fetch pode ser SELECT (lazy load) ou JOIN (eager load)-->
    <bag name="Produtos" fetch="join">
      <key column="CategoriaId"/>
      <one-to-many class="Produto"/>
    </bag>
  </class>
</hibernate-mapping>

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<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.MsSql2012Dialect
    </property>
    <property name="connection.connection_string">
      Server=.\sqlexpress;Database=loja;User Id=sa;Password=***********;
    </property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
  </session-factory>
</hibernate-configuration>
2 respostas

Os XML utilizados estão incluídos acima.

solução!

A.....