public List<T> findAll(UserInfo userInfo, F form) {
    logger.infoCode("I0001");

    // 必須
    Specification<T> whereUserKey =
        new Specification<T>() {
          @Override
          public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            return cb.equal(root.get("usUserTbl").get("userKey"), userInfo.getTargetUserKey());
          }
        };
    // 言語
    Specification<T> whereLanguage =
        StringUtil.isNull(form.getLanguage())
            ? null
            : new Specification<T>() {
              @Override
              public Predicate toPredicate(
                  Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                return cb.equal(root.get("paperLanguage"), form.getLanguage());
              }
            };

    List<T> list =
        (List<T>)
            repository.findAll(
                (Specification<T>) Specifications.where(whereUserKey).and(whereLanguage));

    logger.infoCode("I0002");
    return list;
  }
  /**
   * Handles listing of shallow metric representations. Method still has to be overridden (and
   * annotated) in subclasses because of the way {@link PagedResourcesAssemblerArgumentResolver}
   * works.
   */
  protected PagedResources<MetricResource> list(
      Pageable pageable, PagedResourcesAssembler<M> pagedAssembler) {
    /* Page */ Iterable<M> metrics = repository.findAll(/* pageable */ );

    // Ok for now until we use PagingAndSortingRepo as we know we have lists
    Page<M> page = new PageImpl<M>((List<M>) metrics);
    return pagedAssembler.toResource(page, shallowResourceAssembler);
  }
  public List<F> findAllProfileView(UserInfo userInfo, String[] publicFlags) {
    logger.infoCode("I0001");

    //
    Specification<T> whereUserKey =
        new Specification<T>() {
          @Override
          public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            return cb.equal(root.get("usUserTbl").get("userKey"), userInfo.getTargetUserKey());
          }
        };

    // 取得条件:
    Specification<T> wherePublicFlags =
        publicFlags == null
            ? null
            : new Specification<T>() {
              @Override
              public Predicate toPredicate(
                  Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Predicate predicate = cb.conjunction();
                for (int i = 0; i < publicFlags.length; i++) {
                  String keyword = publicFlags[i];
                  if (i == 0) {
                    predicate = cb.and(predicate, cb.equal(root.get("publicFlag"), keyword));
                  } else {
                    predicate = cb.or(predicate, cb.equal(root.get("publicFlag"), keyword));
                  }
                }
                return predicate;
              }
            };

    List<T> list =
        (List<T>)
            repository.findAll(
                (Specification<T>) Specifications.where(whereUserKey).and(wherePublicFlags));

    logger.infoCode("I0002");
    return getDtoList(list);
  }