Oi Magno,
nunca tentei, mas teoricamente, se forem registros já persistidos, ele irá lidar para você de forma transparente, pois como as classes herdam da abstrata, o GORM irá fazer a busca antes de passar os parâmetros para o seu controlador.
Agora, se for um databinding no qual os registros ainda não tenham sido persistidos, não tenho certeza se funcionaria. Caso não funcione, eu tentaria com um command object.
Sim, são instancias novas, não tem correspondente no banco.
Eu acabei percorrendo os parametros e montando os objetos na mão, mas não gostei. Como o uso de command objects resolveria este problema?
Os command objects são como as classes de domínio, tem o mesmo mecanismo de validação: a diferença é que são usados apenas para data binding e validação (mesmíssimas regras de constraint).
Então você poderia usar o Command Object para executar o data binding contra os atributos recebidos, incluindo um atributo adicional, chamado tipo. E então, no próprio objeto databingind, criar uma função que te retorne a instância do tipo desejado (com base no atributo adicional) para você, implementando um padrão Factory.
Não é o melhor dos mundos, mas pelo menos você centraliza em um ponto só a instanciação correta deste tipo de objeto.
Entendi!
Daria para fazer o mesmo com @BindUsing direto nos domains, né??