Como eu faço para que aliasToBean funcione com Projections.projectionList() quando se tem uma projection para um atributo primitivo dentro de um atributo composto, com no exemplo abaixo?
Se eu coloco o alias, como no exemplo abaixo, ele levanta uma exception informando que encontrou o method setter para “materia.descricao”.
Se eu colocar uma projection direto para o atributo composto, ex: Projections.property(“material”), “material” , funciona, porém ele coloca no select todos os campos desse atributo composto, o que eu não quero, pois só vou usar a descrição.
Se eu utilizar o Transformers.ALIAS_TO_ENTITY_MAP, funciona porém ele me retorna uma lista de mapas, o que não é o ideal, queria que ele me retornasse uma lista de itemsc, dentro do itemsc o material com sua descrição e o motivo de urgência com sua descrição.
Alguma solução? Procurei no forum do hibernate e nada, única coisa que achei foram alguns exemplos que o pessoal utiliza um DTO, somente com esses campos do projection e no aliasToBean informa esse DTO.
Criteria criteria = getSession().createCriteria(ItemSC.class)
.createAlias("solicitacaoCompra", "solicitacaoCompra")
.createAlias("motivoUrgencia", "motivoUrgencia")
.createAlias("material", "material")
.setProjection(Projections.projectionList()
.add( Projections.property("codigo"),"codigo")
.add( Projections.property("status"),"status")
.add( Projections.property("quantidade"),"quantidade")
.add( Projections.property("observacao"),"observacao")
.add( Projections.property("dataNecessidade"),"dataNecessidade")
.add( Projections.property("motivoUrgencia.descricao"), "motivoUrgencia.descricao")
.add( Projections.property("material.descricao"), "material.descricao" )
)
.setResultTransformer( Transformers.aliasToBean(ItemSC.class) );
Uma outra dúvida que eu tenho e que acho importante é.
Existe algum metodo no hibernate tipo o update_attributes do activerecord que o rails utiliza?
Eu quero atualizar um registro, porém não quero carregar ele para poder atualizar e também não quero usar nem hql nem sql, queria usar o metodo update ou saveOrUpdate, e ele só atualizasse os atributos de um objeto que forem diferente de null, ou então eu pudesse informar os attributos que quero atualizar.
E outra, tem casos também de até ter a instancia carregada de um objeto, porém eu não quero, ao dar update, atualizar tudo, quero atualizar somente alguns atributos. Alguém sabe informar se tem algum metodo para eu fazer isso?
Grato,
Thiago Antonius