Herança + OneToOne = Erro na query!

0 respostas
O

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.

Criado 13 de julho de 2009
Respostas 0
Participantes 1