Spring JPA存储库如何编写查询

时间:2015-12-09 10:13:36

标签: spring jpa spring-data-jpa

我有一个由{id}标识的User类,以及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个对象作为参数结果?

1 个答案:

答案 0 :(得分:3)

您可以从文档中

  

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

        vec2 start, end, center; // input values
        float radius; // input value

        // making the start and end relative to center
        start -= center;
        end -= center;

        vec2 current = start/length(start) * radius;  // current position starts in first vector

        vec2 target = end/length(end) * radius; // should be the last point

        outputBuffer[0] = current+center; // insert the first point
        for(int i=1;; i++) { // "break" will need to exit the loop, we need index only for the buffer
            vec2 step = vec2(current.y, -(current.x)); // a tangential vector from current start point according to center
            step = step/length(step) / tessellationScale; // normalize and apply tessellation

            vec2 next = current + step; // move tangentially
            next = next/length(next) * radius; // normalize and set the

            if(dot(current-target, next-target) > .0) { // when we passed the target vector
                current = next; // set the current point
                outputBuffer[i] = current+center; // insert into buffer
            }
            else {
                current = target; // simply use the target now
                outputBuffer[i] = current+center; // insert into buffer
                break; // exit
            }
        }
  

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

所以这将解决问题:

List<Person> findByAddressZipCode(ZipCode zipCode);

参考; Spring Data JPA Documentation