2016-10-07 9 views
0

私は、エンティティのいくつかの値を選択するためにnewを使用しているHQLを使ってクエリを作成しようとしていますが、それは使用しないで動作します。SUMしかし、SUMにはこのエンティティの値が必要です。これを行うには、このエンティティにこのhqlクエリのパラメータを受け取るコンストラクタを作成しました。パラメータをSUMなしで渡すと、動作しますが、パラメータとしてSUMを渡すことはありません。どうすればこの問題を解決できますか?HQLにnewを使用して例外をスローしますか?

例外が

An unhandled exception of type 'NHibernate.QueryException' occurred in NHibernate.dll 

Additional information: Unable to locate appropriate constructor on class [ControleDeVendas.domain.Estoque, ControleDeVendas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 

エンティティ

public IList<Estoque> findByDateSintetico(DateTime di, DateTime df){    
      ISession _session = getSession(); 
      String SQL = "SELECT new Estoque(e.dtTransacao, e.produto, e.tipoOperacao, e.qtdTransacao, " + 
              "SUM(CASE e.tipoOperacao WHEN 'E' THEN e.qtdTransacao ELSE 0 END), " + 
              "SUM(CASE e.tipoOperacao WHEN 'S' THEN e.qtdTransacao ELSE 0 END) " + 
              ")" + 
         "FROM Estoque e " + 
         "WHERE e.dtTransacao BETWEEN :di AND :df " + 
         "GROUP BY e.dtTransacao, e.produto " + 
         "ORDER BY e.dtTransacao"; 
      IList<Estoque> list = _session.CreateQuery(SQL) 
       .SetParameter("di", di) 
       .SetParameter("df", df) 
       .List<Estoque>(); 
      Console.WriteLine("LISTA ESTOQUE: " + list.Count); 
      return list; 
     } 

をしようと

[Serializable] 
    public class Estoque { 

     public virtual long id        { set; get; } 
     public virtual DateTime dtTransacao     { set; get; } 
     public virtual Produto produto      { set; get; } 
     public virtual String historico      { set; get; } 
     public virtual String tipoOperacao     { set; get; } 
     public virtual int qtdTransacao      { set; get; } 
     public virtual decimal valorTransacao    { set; get; } 
     public virtual String usuario      { set; get; } 
     public virtual int totalEntradas     { set; get; } 
     public virtual int totalSaidas      { set; get; } 

     public Estoque() {    
     } 

     //receive params of HQL Query 
     public Estoque(DateTime dtTransacao, Produto produto, String tipoOperacao, int qtdTransacao, int totalEntradas, int totalSaidas){ 
      this.dtTransacao = dtTransacao; 
      this.produto = produto; 
      this.tipoOperacao = tipoOperacao; 
      this.qtdTransacao = qtdTransacao; 
      this.totalEntradas = totalEntradas; 
      this.totalSaidas = totalSaidas; 
     } 

     public override bool Equals(object obj){ 
      return base.Equals(obj); 
     } 

     public override int GetHashCode(){ 
      return base.GetHashCode(); 
     } 
    } 

答えて

0

である私は最終的にPRを解決しましたオベレム。私は属性totalEntradastotalSaidasInt64とその動作のみを定義します。

関連する問題