Spring data 如何从HQL查询创建谓词?

Spring data 如何从HQL查询创建谓词?,spring-data,spring-data-jpa,jpql,Spring Data,Spring Data Jpa,Jpql,我有一个存储库: @Repository public interface UserRepository extends JpaRepository<User, String>, JpaSpecificationExecutor<User> { @Query("select u from User u, UserRole ur " + "where u.dep = ur.dep " +

我有一个存储库:

@Repository
public interface UserRepository extends
        JpaRepository<User, String>,
        JpaSpecificationExecutor<User> {

    @Query("select u from User u, UserRole ur " +
            "where u.dep = ur.dep " +
            "and u.allowed = 1")
    List<User> getAllowed();

}
因此,我已将
扩展JpSpecificationExecutor
添加到我的存储库中,现在我正在尝试创建
规范
实现:

public class Allowed implements Specification<User> {
    @Override
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
      //??
    }
}
允许的公共类实现规范{
@凌驾
公共谓词toPredicate(根根、CriteriaQuery查询、CriteriaBuilder cb){
//??
}
}

如何将上面的查询转换为谓词?如何执行与
UserRole
实体的连接?

创建一个创建并返回规范的类,其好处是该类可以根据各种情况返回单独的规范

@Component
public class UserSpecification {
    public Specification<User> getAllowedUserSpecification() {
        return new Specification<User>() {

            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Predicate predicate = cb.equal(root.get("allowed"), "1");
                return predicate;
            }
        };
    }
}
规范中不需要用户和用户角色的联接,因为在创建实体类时必须设置关系

@Component
public class UserSpecification {
    public Specification<User> getAllowedUserSpecification() {
        return new Specification<User>() {

            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Predicate predicate = cb.equal(root.get("allowed"), "1");
                return predicate;
            }
        };
    }
}
repo.findAll(userSpecification.getAllowedUserSpecification());