【问题标题】:Spring JPA repository how to write a querySpring JPA 存储库如何编写查询
【发布时间】:2015-12-09 21:50:28
【问题描述】:

我有一个User 类,由 id 标识,还有一个Skills 类,它有自己的 id 字段,并且还引用了User

public class User {

    @Id
    @GeneratedValue
    private int id;

    @JsonIgnore
    @OneToOne(mappedBy = "user")
    private SoftSkills softSkills;
}

另一个有

    @Entity
 public class SoftSkills {

    @Id
    @GeneratedValue
    private int id;

    @OneToOne
    @JoinColumn
    private User user;
}

是否有一种简单的方法来编写查询,实现 JPARepository,通过使用 user.id 字段作为参数搜索 SoftSkills 类并返回 SoftSkills 对象作为结果?

【问题讨论】:

  • List<SoftSkills> findByUserId(int id);

标签: spring jpa spring-data-jpa


【解决方案1】:

您可以,从文档中:

属性表达式只能引用托管实体的直接属性,如前面的示例所示。在创建查询时,您已经确保解析的属性是托管域类的属性。但是,您也可以通过遍历嵌套属性来定义约束。假设一个人有一个带有邮政编码的地址。在这种情况下,方法名称为

List<Person> findByAddressZipCode(ZipCode zipCode);

创建属性遍历 x.address.zipCode。解析算法首先将整个部分 (AddressZipCode) 解释为属性,并检查域类中具有该名称(未大写)的属性。如果算法成功,它将使用该属性。如果不是,该算法将源在驼峰部分从右侧拆分为头部和尾部,并尝试找到相应的属性,在我们的示例中为 AddressZip 和 Code。如果算法找到具有该头部的属性,它将获取尾部并继续从那里向下构建树,以刚才描述的方式将尾部拆分。如果第一次拆分不匹配,算法将拆分点向左移动(地址,邮政编码)并继续。

这样就可以解决问题了:

SoftSkills findByUserId(int id);

参考; Spring Data JPA Documentation

【讨论】:

  • 是的,这就是诀窍 :) 你能指出我找到示例的文档吗?
  • 我已在答案中添加了链接!如果这对你有用,请接受我的回答。
猜你喜欢
  • 1970-01-01
  • 2022-09-22
  • 2021-04-16
  • 2015-03-28
  • 2015-10-13
  • 2018-11-09
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多