olá pessoal, gostaria da ajuda de vcs com esse problema que estou postando.
Estamos desenvolvendo uma aplicação com JPA utilizando Toplink.
TEnho duas entidades, GrupoUsuario e Usuario, mapeadas num arquivo orm.xml .
O problema a seguir ocorre justamente durante a carga do contexto de persistência:
[TopLink Config]: 2007.08.31 10:25:54.671--ServerSession(7306473)--The alias name for the entity class [class br.ipmfor.ipmweb.GrupoUsuario] is being defaulted to: GrupoUsuario.
[TopLink Config]: 2007.08.31 10:25:54.703--ServerSession(7306473)--The alias name for the entity class [class br.ipmfor.ipmweb.Usuario] is being defaulted to: Usuario.
[TopLink Config]: 2007.08.31 10:25:54.765--ServerSession(7306473)--The target entity (reference) class for the many to one mapping element [private br.ipmfor.ipmweb.GrupoUsuario br.ipmfor.ipmweb.Usuario.grupoUser] is being defaulted to: class br.ipmfor.ipmweb.GrupoUsuario.
java.lang.ClassCastException: java.lang.reflect.Field cannot be cast to java.lang.String
at br.ipmfor.ipmweb.Service.listar(Service.java:41)
at br.ipmfor.ipmweb.ClienteManager.Consultar(ClienteManager.java:21)
at br.ipmfor.ipmweb.ClienteManager.main(ClienteManager.java:15)
Agora observem alguns trechos de códigos dessas classes:
GrupoUsuario.java
...
@Id
@Column(name="codigo")
private int codigo;
@Column(name="descricao")
private String descricao;
@Column(name="status")
private String status;
@OneToMany
private Set<Usuario> usuarios = new HashSet<Usuario>();
public boolean adicionar(Usuario usuario){
return this.usuarios.add(usuario);
}
public boolean remover(Usuario usuario){
return this.usuarios.remove(usuario);
}
...
Mapeamento em orm.xml
...
<entity class="br.ipmfor.ipmweb.GrupoUsuario"
access="PROPERTY"
metadata-complete="true" >
<table name="grupo_usuario" schema="ipm"></table>
<attributes>
<id name="codigo"><column name="codigo"
table="grupo_usuario"/></id>
<basic name="descricao" >
<column name="descricao"
table="grupo_usuario"></column>
</basic>
<basic name="status">
<column name="status"
table="grupo_usuario">
</column>
</basic>
<one-to-many name="usuarios" mapped-by="grupoUser">
<cascade><cascade-all /></cascade>
</one-to-many>
</attributes>
</entity>
<entity class="br.ipmfor.ipmweb.Usuario" access="PROPERTY" metadata-complete="true">
<table name="usuario" schema="ipm"></table>
<attributes>
<embedded-id name="usuariopk">
<attribute-override name="codigoGrupoUsuario">
<column name="grupo"></column></attribute-override>
<attribute-override name="login">
<column name="login" ></column>
</attribute-override>
</embedded-id>
<basic name="nome">
<column name="nome" table="usuario" ></column></basic>
<basic name="senha">
<column table="usuario" name="senha" /></basic>
<many-to-one name="grupoUser">
<join-column name="grupo" insertable="true" updatable="true">
</join-column>
<join-column name="login" insertable="true" updatable="true" />
</many-to-one>
</attributes>
</entity>
<embeddable class="br.ipmfor.ipmweb.IdUsuario">
<attributes>
<basic name="codigoGrupoUsuario">
<column name="grupo"></column></basic>
<basic name="login">
<column name="login" /></basic>
</attributes>
</embeddable>
Tenho a suspeita de que seja no momento do contexto fazer a junção um-para-muitos em GrupoUsuario, Pois a relação muits-para-um de Usuario passa sem problemas. Essa função listar carrega um DAO que acessa a camada de persistência :
...
private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("Teste");
private static EntityManager em = emf.createEntityManager();
...
Agradeço antecipadamente a vossa colaboração.
Wagner
“Vinde , cantemos com júbilo ao Senhor”