在 jpa 查询中读取索引中的数组

Read Array at index in jpa Query

我有一个 return 对象列表的本机查询,我需要将数组作为参数传递给函数 getAllUsers

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    @Query(nativeQuery = true, value = "SELECT id FROM users WHERE code1=(?1)[0] AND code2=(?1)[1]")
    public List<Object[]> getAllUsers(List<String> list);
}

问题是我无法在查询中获取参数 list 的值:code1=(?1)[0] AND code2=(?1)[1].

我尝试使用类型:

public List<Object[]> getAllUsers(String[] list);

public List<Object[]> getAllUsers(String ...list);

却始终没有结果

非常感谢任何帮助

我不确定 @Query 是执行动态查询的正确方法。您应该考虑 CriteriaAPI 的使用。您可以尝试使用 SpecificationQueryDsl https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl

通过规范解决您的问题的示例:

@Repository
public interface UserRepository 
    extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> { 

}

@Service
@RequiredAllArgConstuctor
public class UserService {
    
    private final UserRepository userRepository;
    
    public List<User> getAllUsers(List<String> codeArguments) {
        var specification = (Specification<T>) (root, query, criteriaBuilder) -> {
            var predicates = new Predicate[codeArguments.size()];
            for (int i = 0; i < codeArguments.size(); i++) {
                var predicate = criteriaBuilder.equal(root.get("code" + (i + 1)), codeArguments.get(i));
                predicates[i] = (predicate);
            }
            return criteriaBuilder.and(predicates);
        };
       
        return userRepository.findAll(specification);
    }
}