Olá,
Tenho uma classe pai Documento e classes que fazem herança esta classe DocumentoOficio, DocumentoContrato, etc… tudo mapeado via estratégia JOINED.
Preciso fazer um “cast” de uma classe filha salva no banco para outra.
Exemplo: tenho salvo no banco um objeto DocumentoOficio e quero trocar este objeto para DocumentoContrato, mantendo os atributos referentes à classe pai (id, data cadastro, etc), pois não quero perder log, e outros dados referente a este objeto.
Tentei fazer da seguinte forma, na sequencia via query nativa:
- update do discriminator na tabela referente a classe pai via query nativa (DocumentoOficio > DocumentoContrato)
- exclusão da linha do objeto na tabela referente a classe DocumentoOficio
- inclusão de uma linha na tabela referente a classe DocumentoContrato
Tudo ocorre nos conformes… problema é que o JPA não consegue identificar essa alteração feita via query nativa.
Alguem tem alguma sugestão para fazer este “cast” de objeto? Ou alguma forma de fazer o JPA sincronizar esta alteração.
Obs.: utilizo eclipselink para o JPA.
Segue exception quando tento fazer pesquisa do documento:
Exception Description: Trying to set value [[documento.Interessado@10dec4]] for instance variable [interessados] of type [java.util.List] in the object. The specified object is not an instance of the class or interface declaring the underlying field, or an unwrapping conversion has failed.
Internal Exception: java.lang.IllegalArgumentException: Can not set java.util.List field documento.DocumentoContrato.interessados to documento.DocumentoOficio
Mapping: org.eclipse.persistence.mappings.ManyToManyMapping[interessados]
Descriptor: RelationalDescriptor(documento.DocumentoContrato --> [DatabaseTable(g_documento)])"