public class WebUser {
@ElementCollection(targetClass = SecurityRole.class)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "webRole_SecurityRole")
@Column(name = "roles")
private List<SecurityRole> securityRoles = new ArrayList<SecurityRole>();
}
I retrieve user security roles using this named query :
@NamedQuery(name=WebUser.GET_WEBUSER_SECURITYROLES,
query="select w.securityRoles from WebUser w where w.id=:id")
and when iterating through roles to display them using foreach loop:
List<SecurityRole> securityRoles = webUserFacade
.findUserSecurityRoles("51");
for (int i = 0; i < securityRoles.size(); i++) {
System.out.println(securityRoles.get(i).getTitleResourceName());
}
I got this exception : java.lang.ClassCastException: java.lang.String cannot be cast to com.myproject.SecurityRole
SecurityRole enum :
public enum SecurityRole {
private SecurityRole(String titleResourceName, String detailResourceName,
String url, String iconName, SecurityRoleGroup securityRoleGroup) {
this.detailResourceName = detailResourceName;
this.url = url;
this.titleResourceName = titleResourceName;
this.iconName = iconName;
this.securityRoleGroup = securityRoleGroup;
}
//gettters
}
findUserSecurityRoles method in my facade :
public List<SecurityRole> findUserSecurityRoles(String id) {
return getEntityManager().createNamedQuery(
WebUser.GET_WEBUSER_SECURITYROLES, SecurityRole.class).setParameter("id", id)
.getResultList();
}