Jpa Specification実装andとorクエリーの同時使用
3078 ワード
andとorを併用したクエリー
UserServiceImplクラス、サービス実装クラス
注意:
UserServiceImplクラス、サービス実装クラス
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private RongUserRepository rongUserRepository;
//FriendNumResult
//FriendNumParam
//RongUser
@Override
public FriendNumResult friendNum(FriendNumParam friendNumParam) {
FriendNumResult friendNumResult=new FriendNumResult();
Specification specification = new Specification(){
@Override
public Predicate toPredicate(Root root, CriteriaQuery> criteriaQuery, CriteriaBuilder criteriaBuilder) {
// and
List listAnd = new ArrayList();
// hql, root.get(),
listAnd.add(criteriaBuilder.equal(root.get("perLevel").as(Integer.class), friendNumParam.getPerLevel()));
Predicate[] array_and=new Predicate[listAnd.size()];
Predicate Pre_And = criteriaBuilder.and(listAnd.toArray(array_and));
// or
List listOr = new ArrayList();
listOr.add(criteriaBuilder.equal(root.get("fId").as(Integer.class), friendNumParam.getUid()));
listOr.add(criteriaBuilder.equal(root.get("fId2").as(Integer.class), friendNumParam.getUid()));
Predicate[] arrayOr = new Predicate[listOr.size()];
Predicate Pre_Or = criteriaBuilder.or(listOr.toArray(arrayOr));
return criteriaQuery.where(Pre_And,Pre_Or).getRestriction();
// and or
//return criteriaBuilder.and(list.toArray());
}
};
long num=this.rongUserRepository.count(specification);
friendNumResult.setFriendNum(Integer.valueOf((int)num));
return friendNumResult;
}
}
RongUserRepository
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
//RongUser
public interface RongUserRepository extends JpaRepository , JpaSpecificationExecutor {
}
注意:
Specification ,
RongUserRepositoryインタフェースを使用するには、JpaSpecificationExecutor、RongUser対応テーブルのエンティティークラスを実装する必要があります.