Buenas.
He seguido la traza y parece que no es de propio @ManyToMany el problema.
Uso JSF 2.1 para la vista. El @ManyToMany lo calculo a partir de un <h:selectManyCheckbox />, que calculo de la siguiente forma:
Código:
<h:selectManyCheckbox
id="permisos"
value="#{puestosBean.permisosEntidad}"
layout="pageDirection">
<f:selectItems value="#{puestosBean.permisos}" />
</h:selectManyCheckbox>
En el lado del Backing bean tengo lo siguiente:
Código:
/**
* Lista de permisos
* posibles.
*/
private List<SelectItem> permisos;
/**
* Permisos de la entidad.
*/
private Set<Permiso> permisosEntidad;
/**
* Devuelve la lista de posibles
* permisios.
* @return Lista de posibles
* permisos
*/
public List<SelectItem> getPermisos() {
return permisos;
}
/**
* Inserta la lista
* de posibles permisos.
* @param permisos Lista de
* posibles permisos
*/
public void setPermisos(
final List<SelectItem> permisos) {
this.permisos = permisos;
}
/**
* Devuelve la lista de
* permisos de la entidad.
* @return Lista de permisos
* de la entidad
*/
public Set<Permiso> getPermisosEntidad() {
return permisosEntidad;
}
/**
* Inserta la lista de
* permisos de la entidad.
* @param permisosEntidad Lista de permisos
* de la entidad
*/
public void setPermisosEntidad(
final Set<Permiso> permisosEntidad) {
this.permisosEntidad = permisosEntidad;
}
/**
* Carga los combos para los
* crud.
*/
@PostConstruct
public void cargarCombos() {
final List<Permiso> todosPermisos = this.permisosBO.getTodos();
this.permisos = new ArrayList<SelectItem>();
if ((todosPermisos != null) && !todosPermisos.isEmpty()) {
for (final Permiso permiso : todosPermisos) {
final SelectItem elem = new SelectItem();
elem.setDescription(permiso.getDescripcion());
elem.setLabel(permiso.getNombre());
elem.setValue(permiso);
this.permisos.add(elem);
}
}
if (this.getEntidad() != null) {
this.permisosEntidad = this.getEntidad().getPermisos();
}
}
/**
* {@inheritDoc}
*/
@Override
public String guardado() {
final Puesto entidad = this.getEntidad();
entidad.setPermisos(this.permisosEntidad);
if (this.getEntidad().getId() == null) {
this.puestosBO.guardar(entidad);
} else {
this.puestosBO.editar(entidad);
}
return Nav.PUESTOS;
}
Al parecer, aunque el atributo "permisosEntidad" es un Set<Permiso>, la etiqueta <h:selectManyCheckbox /> ¡me mete una lista de Strings!.
Y al pasárselo a la entidad, e intentar guardarlo con JPA, me sale ese error de casting. Por eso me dice que no puede convertirlo a String...
No se si tengo que implementarme un conversor para este tipo de etiquetas.
¡Muchas gracias por el interés jav_000!.
Un saludo.