Tem algum modo de eu dizer ao VRaptor para somente popular o meu modelo pelo construtor?
É porque o meu modelo possui vários setters que eu não quero que sejam populados via parameter injection e
o VRaptor permite isso, pois ele popula tanto pelo Construtor quanto pelos setters, ao mesmo tempo.
Preciso dos setters pois o hibernate tem uma feature chata que se eu não expor os getters e setters, ao fazer
getId() em meu modelo detached ele vai tentar acessar o banco.
se você usa o IOGI ele vai popular o objeto pelo construtor…
o Hibernate força vc usar os setters? a @Id está no atributo?
teoricamente o Hibernate não força nada disso se o @Id estiver no atributo, daí vc pode remover todos os setters dos atributos que vc não quer deixar expostos.
Lucas, o default do VRaptor não é usar o iogi? Eu não incluí nenhuma configuração para usá-lo pois penso que seja o default.
O hibernate tem uma feature que se você anotar o @id no field em vez de no accessor ele irá realizar uma consulta no banco
caso você faça modelo.getId(). Por isso eu tive que anotar o @id no accessor e para isso precisei dos benditos getters and setters
pois anotando no accessor o hibernate procurará pelas anotacoes nesses accessors e nao nos fields…
Enfim, eu fucei um pouco na web e vi que tem como fazer com que o @id seja colocado no field e o lazy load não ocorra, vou corrigir
o meu modelo. Mas de todo modo, eu ainda terei algum setter no meu modelo, que eu vou usar dentro da minha aplicação, e eis a questão:
Digamos que eu envio os parametros x,y,z,w, e no meu modelo eu tenho o construtor para x,y e z. O iogi irá popular os parametros enviados
no construtor x,y,z, e também vai popular os parametros excedentes, no caso o w, via setter. É aqui que eu não queria que isso acontecesse.
garcia, é exatamente isso. Se eu tenho o construtor que satisfaz os parametros, o iogi vai popular usando esse construtor e, depois, os parametros restantes ele vai popular via setter.
O correto seria ele popular pelo construtor ou pelo setter, mas não popular pelo construtor e entao popular o restante via setter. Isso me permitiria enviar parametros extras para tentar
realizar um parameter injection.