我有一个由{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
个对象作为参数结果?
答案 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);