dear community,

I really enjoy using the criteria api from the Deltaspike (version 1.8.2)
Data module.
At the moment i do have the problem, that I need to query an enumset.

The Class structure looks like this:

-----------------------------------------
class BuildPart {
    String name;
    Set< Permission > permissions
}

class Permission {
    Long userid;
    Set<PermissionType> permissionTypes;
}

enum PermissionType {
    CREATE, READ, EDIT, DELETE
}
-----------------------------------------

i want to query for BuildParts where userid = 2 has permissions to read, I
tried:

-----------------------------------------
criteria()
  .join(BuildPart_.permissions,
    where (Permission.class)
    .eq(Permission_.userid, 2L)
  )
  .join(Permission_.permissionTypes,
    where(PermissionType.class)
    .eq(PermissionType.READ) <--- NOT possible
  )
-----------------------------------------

the "eq" function and also the "in" function always require a
"SingularAttribute" parameter.
when using Criteria of JPA, i got this simply working by:

-----------------------------------------
SetJoin<BuildPart, Permission> permissionJoin =
root.join(BuildPart_.permissions);
Predicate readPermissions = criteriaBuilder.and(
    criteriaBuilder.equal(
        permissionJoin.get(Permission_.userid),
        2L,
    criteriaBuilder.isMember(
        PermissionType.READ,
        permissionJoin.get(Permission_.permissionTypes)));
-----------------------------------------

Is there a way, how i could achieve such a query? (maybe with a workaround)
Thanking you very much for any idea

best regards

Tom

Reply via email to