Spring Data JPA - Pass column name and value as parameters

前端 未结 3 774
长发绾君心
长发绾君心 2020-12-04 01:31

I just wanted to know how to pass column name and its value to @Query annotation in Spring Data JPA.

Basically column names will be static and we used to put every c

3条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-04 01:37

    Take a look at sping data Specifications. You can find your solution there!
    Reading the docs you can see that if Calendar is your domain (I would try to find a different name for my domain, there is a Calendar class in Java SE already), then you could use something like the above,

    @Repository
    public interface CalendarRepository extends JpaRepository, JpaSpecificationExecutor {
    }
    
    
    public class CalendarSpecification implements Specification {
    
        private String randomColumnName; // A varchar column.
        private String valueToSearchFor;
    
        public CalendarSpecification(String randomColumnName, String valueToSearchFor) {
            this.randomColumnName = randomColumnName;
            this.valueToSearchFor = valueToSearchFor;
        }
    
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) {
            return builder.and(builder.equal(root.get(this.randomColumnName), this.valueToSearchFor));
        }
    }
    
    
    @Service
    public class CalendarService {
    
        @Autowired
        private CalendarRepository calendarRepository;
    
        public List findCustom(String randomColumnName, String valueToSearchFor) {
            CalendarSpecification cs = new CalendarSpecification(randomColumnName, valueToSearchFor);
            return calendarRepository.find(cs);
            // Or using lambda expression - without the need of CalendarSpecification class.
    //      return calendarRepository.find((Root root, CriteriaQuery query, CriteriaBuilder builder) -> {
    //          return builder.and(builder.equal(root.get(randomColumnName), valueToSearchFor));
    //      });
        }
    }
    

提交回复
热议问题