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
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));
// });
}
}