1

さて、以下の質問があります、ニックネーム(エイリアス)を設定してテーブル間の結合を行うには、デコードを行う必要があり、エイリアスエイリアスを使用しましたが、純粋なSQLの使用を認識しないため、使用する必要があります。

テーブルの条件を定義する名前を返すにはどうすればよいですか? 別の方法を提案できる場合は、sqlGroupProjection を使用しています。

Criteria criteria = dao.getSessao().createCriteria(Chamado.class,"c");

criteria.createAlias("c.tramites","t").setFetchMode("t", FetchMode.JOIN);

projetos.add( Projections.rowCount(),"qtd");

criteria.add(Restrictions.between("t.dataAbertura", Formata.getDataD(dataInicio, "dd/MM/yyyy"), Formata.getDataD(dataFim, "dd/MM/yyyy")));

projetos.add(Projections.sqlGroupProjection("decode(t.cod_estado, 0, 0, 1, 1, 2, 1, 3, 2, 4, 1, 5, 3)  as COD_ESTADO",
             "decode(t.cod_estado, 0, 0, 1, 1, 2, 1, 3, 2, 4, 1, 5, 3)", 
             new String[]{"COD_ESTADO"}, 
             new Type[]{Hibernate.INTEGER}));

criteria.setProjection(projetos);

List<Relatorio> relatorios = criteria.setResultTransformer(Transformers.aliasToBean(Relatorio.class)).list();

基準によって生成される SQL:

select count(*) as y0_, 

       decode(t.cod_estado, 0, 0, 1, 1, 2, 1, 3, 2, 4, 1, 5, 3) as COD_ESTADO 

from CHAMADOS this_  

 inner join TRAMITES t1_ on this_.COD_CHAMADO = t1_.COD_CHAMADO  

where t1_.DT_ABERTURA between ? and ?  

group by decode(t.cod_estado, 0, 0, 1, 1, 2, 1, 3, 2, 4, 1, 5, 3)
4

0 に答える 0