sql >> Databasteknik >  >> RDS >> Mysql

Spring Boot JPA:Skickar flera värden för samma parameter (JPQL)

Eftersom @Query måste fixas vid kompilering med JPQL eller till och med inbyggd fråga kommer att göra den här typen av saker svåra att implementera, särskilt på ett typsäkert sätt.

Så jag inser att du är ute efter JPQL-lösning men det här är en fantastisk möjlighet att lära sig och dra nytta av Specification gränssnitt och JPA:s CriteriaQuery. Det är precis det den är till för.

Ta en titt på följande arkiv:

public interface Table1Repository            // to use specifications in queries 
        extends JpaRepository<Table1, Long>, JpaSpecificationExecutor<Table1> {

    @SuppressWarnings("serial")
    public static Specification<Table1> multiLikeColumn1(List<String> likePatterns) {
        return new Specification<Table1>() {
            @Override
            public Predicate toPredicate(Root<Table1> root, CriteriaQuery<?> query,
                                            CriteriaBuilder criteriaBuilder) {
                Path<String> column1 = root.get("column1");
                // create a Predicate for each "column1 like 'xy%az%' you need
                List<Predicate> predicates = likePatterns.stream()
                    .map(likePattern -> criteriaBuilder.like(column1, likePattern))
                    .collect(Collectors.toList());
                // then "concatenate" list of likes with "OR"
                return criteriaBuilder.or(predicates.toArray(new Predicate[]{}));
            }
        };
    }

}

Det kan se lite komplicerat ut men det är det faktiskt inte när du blir bekant med det. Användningen är enkel, som:

@Resource
private Table1Repository repo;
repo.findAll(Table1Repository.multiLikeColumn1(Arrays.asList("%X%","%Z%")))



  1. TNS-12519 utan maximala processer uppnådda

  2. Kommer GETUTCDATE() att returnera samma värde om det används två gånger i samma programsats?

  3. Använd e-postadress som primärnyckel?

  4. Välj rader från en tabell, slå samman den senaste raden från en annan tabell med en-till-många-relation