Spring Data JPA:不区分大小写的orderBy

时间:2017-03-27 10:25:00

标签: java spring spring-data-jpa

我想按 name 属性按升序排序我的实体并忽略大小写。

我创建了一个扩展Spring Data Repository接口的EntityRepository。然后我宣布了以下查找方法:

List<Entity> findByNameOrderByNameIgnoreCaseAsc(String name);

但是我收到了这个错误&#34;没有为类型&#34;找到属性ignoreCase。

我无法在Spring Data JPA documentation中找到对此案例的任何引用。

我使用的是spring-data-jpa版本1.11.0。

4 个答案:

答案 0 :(得分:2)

如果您只想返回所有按名称排序且忽略大小写的实体,则可以使用以下方法:

  //POST: api/Email
    [HttpPost]
    public async Task<IActionResult> Post()
    {

        using (MailMessage mailMessage = new MailMessage())
        {
            mailMessage.Attachments.Add(new Attachment(@"C:\a.pdf"));
            mailMessage.Attachments.Add(new Attachment(@"C:\b.pdf"));
            mailMessage.To.Add("someone@somehwere.com");

            using (var smtpClient = new SmtpClient("smtp.gmail.com", 578))
            {
                smtpClient.Credentials = new NetworkCredential("me@gmail.com", "12345");
                smtpClient.EnableSsl = true;
                await smtpClient.SendMailAsync(mailMessage);
            }
        }

        File.Delete(@"C:\a.pdf");
        File.Delete(@"C:\b.pdf");

        return Ok();
    }

答案 1 :(得分:0)

你的方法应该是这样的。

List<Entity> findByNameIgnoreCaseOrderByNameAsc(String name);

请参阅https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

答案 2 :(得分:0)

Spring Data IgnoreCase只能用于查找属性,而不能与Order by结合使用。

但是,您可以使用Sort.Order.ignoreCase()和页面http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Sort.Order.html#ignoreCase--

为您提供结果

答案 3 :(得分:0)

请尝试在下面创建存储库方法(请注意添加的sort参数)

List<Entity> findByName(String name, Sort sort);

然后在此存储库中扩展PagingAndSortingRepository(Long是您的实体ID类型是什么):

extends PagingAndSortingRepository<Entity, Long>

然后按如下方式调用方法:

repository.findByName("nameToFind", Sort.by(Sort.Order.asc("name").ignoreCase()));