Boa tarde a todos.Tenho um mapeamento many to many usando set :
Usuario
@Entity
public class Usuario extends AbstractEntity {
private static final long serialVersionUID = 7649818757373046718L;
private String nome;
private String email;
private String senha;
@ManyToMany(mappedBy="usuarios", cascade = CascadeType.ALL)
private Set<Regra> regras = new HashSet<Regra>(0);
//Getters and Setters
Regra
@Entity
public class Regra extends AbstractEntity {
private static final long serialVersionUID = 1L;
private String nome;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="usuario_regra",
joinColumns={@JoinColumn(name="idregra")},
inverseJoinColumns={@JoinColumn(name="idusuario")})
private Set<Usuario> usuarios = new HashSet<Usuario>(0);
//Getters and Setters
No Controller usuario quero mostrar todas as regras associados à aquele usuário , mas até agora só consegui fazer que retorne todas as regras:
UsuarioController
@Get("/usuario/{usuario.id}")
public void exibir(Usuario usuario) {
usuario = repository.loadById(usuario.getId());
@SuppressWarnings("unchecked")
List <Regra> regraList = (List<Regra>) repository.mostrarRegras(usuario.getId());
result.include("usuario", usuario);
result.include("regraList", regraList);
}
Adicionei um mostrarRegras no repository
public Regra mostrarRegras(long id) {
String hql = "select r.nome from Regra r , Usuario u where u.regras = r.id and u.id = :id";
Query query = (Query) manager.createQuery(hql)
.setParameter("id", id);
return (Regra) query.list();
}
E na jsp estou tentando mostrar o resultado assim
<c:forEach items="${regraList}" var="regra">
<h2>${regra.nome}</h2>
</c:forEach>
Mas ao testar aparesse a seguinte erro:
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: javax.persistence.PersistenceException: org.hibernate.TypeMismatchException: left and right hand sides of a binary logic operator were incompatibile [java.util.Set(br.com.wbotelhos.movy.model.Usuario.regras) : long]
Aparentemente é um erro de compatibilidade entre o Set e long ?
Oque estaria errado no meu código ?Obrigado !