[Resolvido] É possível criar um UserType de uma Interface?

Olá pessoal.

Estou com um grande problema e não consigo resolver e não queria perder a flexibilidade do meu projeto. Eu criei uma interface chamada Calculavel. Todos os tipos que são calculáveis, implementam essa interface. E eu estou referenciando ela em uma entidade do Hibernate. Eu criei um UserType e referenciei ela no TypeDef. Pra salvar, foi de boa, porque eu só preciso mandar o BigDecimal que ela contém. Mas pra fazer o get, ele dá erro porque o Hibernate não consegue “setar” o valor na interface, porque ela não tem corpo. O problema está no nullSafeGet e como vem um BigDecimal do banco, eu não sei qual tipo eu posso implementar pro retorno desse método.

Então eu tenho duas perguntas cruciais.

1- Existe a possibilidade de criar UserType de uma Interface, e quando salvar um tipo concreto dessa Interface, o Hibernate trate corretamente?
2- Se caso não exista a possibilidade, se eu mudar a Interface Calculavel para uma classe abstrata, o problema se resolve? (Eu acho bem provável que não)

Eu pesquisei bastante no Google e só achei exemplos de classes concretas. Olhei no livro Hibernate In Action e só vi sobre classe concreta também.

Alguém pode me dar uma luz?

Obrigado.

Bom pessoal, eu desenvolvi uma solução. Eu não sei se é a mais bela de todas, mas o código ficou pequeno e resolvi meu problema sem ter que alterar minha estrutura de classes. Eu criei um CompositeUserType e salvei o nome da classe junto com o valor BigDecimal. No método nullSafeGet, eu peguei o nome da classe, e por reflection, peguei o nome da classe e instanciei a mesma com o valor do BigDecimal.

Como eu disse, não sei se é a solução mais “limpinha”, mas se alguém estiver com esse mesmo problema, essa seria uma boa solução e ainda é possível manter a flexibilidade das interfaces :slight_smile:

Abraços.