Prezados Srs.
Possuo as classes Insumo e Ins_Material, conforme abaixo;
@Entity
@Table(name = "insumo")
@Inheritance (strategy=InheritanceType.JOINED)
@DiscriminatorColumn (name="tipo",discriminatorType=DiscriminatorType.CHAR, length=1)
@DiscriminatorValue (value="M")
@NamedQueries({@NamedQuery(name="insumo_cadastrados", query="SELECT ins FROM Insumo ins WHERE ins.situacao = :insumo_situacao")})
public class Insumo implements Serializable{
... omissão dos atributos e métodos...
@OneToOne(cascade = CascadeType.ALL, mappedBy = "insumo")
private Ins_Material insMaterial;
@Entity
@Table(name = "ins_material")
@DiscriminatorValue (value="M")
public class Ins_Material extends Insumo implements Serializable{
...omissão dos atributos e métodos...
@OneToOne
@JoinColumn(name = "codigo", nullable = false, unique = true, updatable = false)
private Insumo insumo;
Os procedimentos de persistência estão OK, o problema esta em quando tento recuperar os dados via NamedQueries (executando a insumo_cadastrados da classe Insumo) recebo a seguinte mensagem de erro:
Exception Description: Trying to set value [model.gerais.Insumo@20] for instance variable [insMaterial] of type [model.gerais.Ins_Material] 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 model.gerais.Ins_Material field model.gerais.Insumo.insMaterial to model.gerais.Insumo
Mapping: oracle.toplink.essentials.mappings.OneToOneMapping[insMaterial]
Descriptor: RelationalDescriptor(model.gerais.Insumo --> [DatabaseTable(insumo)])
E se executo novamente a NamedQuery após a mensagem de erro, os registros são trazidos em memória sem a mensagem de erro.
Atenciosamente,
Olavo Jr.