Galera,
To com um problema de mapeamento (acho). Tenho uma tabela USUARIOS e uma tabela GRUPOS_USURIOS. Tenho tb uma tabela associativa GRUPO_USUARIOS_USUARIOS. Tenho uma classe Java com annotations para a tabela USUARIOS e uma para a tabela GRUPO_USUARIOS.
-
Existe a necessidade de se criar uma classe java com annotations para a tabela associativa? Se sim, como seria isso?
-
Caso nao seja o problema acima, AONDE eu coloco o @ManyToMany? Na declaração da variável ou na declaração do método?
Segue abaixo o código e o stack:
UsuarioDTO.java
...
@ManyToMany(
targetEntity=com.mc.dto.GrupoUsuarioDTO.class,
cascade=CascadeType.ALL
)
@JoinTable(
name="MC_GRUPOS_USUARIOS",
joinColumns={@JoinColumn(name="idUsuario")},
inverseJoinColumns={@JoinColumn(name="idGrupoUsuario")}
)
private Set<GrupoUsuarioDTO> grupos;
...
...
...
public Set<GrupoUsuarioDTO> getGrupos() {
return this.grupos;
}
public void setGrupos(Set<GrupoUsuarioDTO> grupos) {
this.grupos = grupos;
}
...
GrupoUsuarioDTO.java
...
@ManyToMany(
targetEntity=com.mc.dto.UsuarioDTO.class,
cascade=CascadeType.ALL
)
@JoinTable(
name="MC_USUARIOS",
joinColumns={@JoinColumn(name="idGrupoUsuario")},
inverseJoinColumns={@JoinColumn(name="idUsuario")}
)
private Set<UsuarioDTO> usuarios;
...
...
...
public Set<UsuarioDTO> getUsuarios() {
return this.usuarios;
}
public void setUsuarios(Set<UsuarioDTO> usuarios) {
this.usuarios = usuarios;
}
...
UsuarioDAO.java
...
public UsuarioDTO efetuaLogin(String usuario, String senha) {
UsuarioDTO object = null;
HibernateUtil HibernateUtil = new HibernateUtil();
try{
Session hibernate = HibernateUtil.getSessao();
Query query = hibernate.createQuery("from UsuarioDTO where usuario = '" + usuario + "' AND senha = md5('" + senha + "') AND status = 'ativo'");
object = (UsuarioDTO) query.uniqueResult();
//HibernateUtil.getSessao().lock(object,LockMode.NONE);
//Hibernate.initialize(object.getGrupos());
HibernateUtil.confirma();
}
catch(Exception e){
e.printStackTrace();
HibernateUtil.aborta();
}
return object;
}
...
Stack:
org.hibernate.MappingException: Could not determine type for: java.util.Set, for columns: [org.hibernate.mapping.Column(grupos)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
at org.hibernate.mapping.Property.isValid(Property.java:185)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:410)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1026)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1211)
at com.mc.util.HibernateUtil.getSessao(HibernateUtil.java:32)
at com.mc.dao.UsuarioDAO.efetuaLogin(UsuarioDAO.java:36)
at com.mc.teste.Main.main(Main.java:18)
java.lang.NullPointerException
at com.mc.dao.UsuarioDAO.efetuaLogin(UsuarioDAO.java:37)
at com.mc.teste.Main.main(Main.java:18)
org.hibernate.MappingException: Could not determine type for: java.util.Set, for columns: [org.hibernate.mapping.Column(grupos)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
at org.hibernate.mapping.Property.isValid(Property.java:185)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:410)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1026)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1211)
at com.mc.util.HibernateUtil.getSessao(HibernateUtil.java:32)
at com.mc.util.HibernateUtil.fechaSessao(HibernateUtil.java:62)
at com.mc.util.HibernateUtil.aborta(HibernateUtil.java:84)
at com.mc.dao.UsuarioDAO.efetuaLogin(UsuarioDAO.java:45)
at com.mc.teste.Main.main(Main.java:18)
Exception in thread "main" java.lang.NullPointerException
at com.mc.teste.Main.main(Main.java:19)
Alguém sabe me falar o que pode estar acontecendo?
Desde já, obrigado.