0
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();
    }
HADEV
  • 437
  • 8
  • 19

0 Answers0