【问题标题】:Spring Repository ignore case on nested entity's fieldSpring Repository 忽略嵌套实体字段的大小写
【发布时间】:2021-07-25 02:08:52
【问题描述】:

我有

public class User {
  ...
  private UserCredentials credentials;
  ...
}
public class UserCredentials {
  ...
  private String username;
  ...
}

我想在我的 User 存储库中添加一个 find-one-by 方法,该方法通过其凭据的用户名查找 User,忽略大小写。所以,我尝试了User findByCredentials_UsernameIgnoreCaseEquals(final String username),但得到了由

引起的异常

org.springframework.data.mapping.PropertyReferenceException:找不到字符串类型的属性小写!遍历路径:UserCredentials.username。

我尝试了其他一些方法名称,但得到了相同的异常。我做错了什么?

谢谢!

【问题讨论】:

  • 仔细检查您的命名约定:usernameuserName,同时检查 getter setter

标签: java spring spring-data


【解决方案1】:

尝试如下不需要_。并确保您在用户和用户凭据表中存在关系,例如 oneToone or onetomany,并且实体具有所有必需的注释。

findByCredentialsUsernameIgnoreCaseEquals(final String username);

【讨论】:

  • 同样的异常。我确实有以下注释:@PrimaryKeyJoinColumn @OneToOne(cascade = CascadeType.ALL, optional = false, orphanRemoval = true).
  • 你有什么异常
【解决方案2】:

这是 Spring Boot 中的 jpa 参考

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

你不需要这个带有 jpa 查询 (_) 的符号,在结束你的关键字时只需要大写

【讨论】:

  • 发布与其他人已经发布的相同内容的答案被认为是不好的。如果 OP 想要使用它,_ 仍然是分隔字段的工作选项。
  • 我发布了参考链接,附注不一样答案谢谢 2
【解决方案3】:

感谢所有回答的人。我应该在我的问题中发布完整的异常,因为在再次查看后,我意识到错误是在不同的存储库中声明的方法。

【讨论】:

  • 对于遇到相同问题的其他人,提供更多信息(例如您提到的例外情况)会很有帮助,因为他们可能有同样的问题
  • 对不起,我直到现在才看到这个。日志早已不复存在,但我一定会继续这样做。
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
相关资源
最近更新 更多