在条件查询中联接时出现错误&Quot;无法定位属性&Quot;

本教程将介绍在条件查询中联接时出现错误&Quot;无法定位属性&Quot;的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在条件查询中联接时出现错误&Quot;无法定位属性&Quot; 教程 第1张

问题描述

我有两张桌子:学生和课程。我必须联接两个表并获取特定的字段。

class Student extends Parent{
  Long id;
  @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
  @OneToMany(fetch = FetchType.LAZY, mappedBy = courses.student, cascade = CascadeType.ALL)
 Set<Courses> coursesList = new HashSet<>();
 }
 
 @Table(name = "courses", indexes = {
 @Index(name = "id", columnList = Courses.id, unique = true),
 @Index(name = "student_course_fk", columnList = "student_fk"),
 class Courses extends Parent{
  Long id;
  @ManyToOne
  @JoinColumn(name = "student_fk")
  Student student;
}
 

如果我查询:-

CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery<Student> q = cb.createQuery(Student.class);
Root<Student> c = q.from(Student.class);
Join<Student,Courses> lineJoin  = root.join("Courses" 
,JoinType.INNER);
lineJoin.on(criteriaBuilder.equal(root.get(Courses.student),
root.get(student.id)));

我在此托管类型[家长]上找不到具有给定名称[学生]的属性
有人能帮我把这两张桌子连在一起吗?我知道我把这两张桌子连在一起做错了什么。

推荐答案

我将更改以下内容:

@OneToMany(fetch = FetchType.LAZY, mappedBy = courses.student,...

@OneToMany(fetch = FetchType.LAZY, mappedBy = student,...

您必须指明目标类的参数,它是在参数类型(Set)中定义的。

Join<Student,Courses> lineJoin  = root.join("Courses",JoinType.INNER);

Join<Student,Courses> lineJoin  = root.join("coursesList",JoinType.INNER);

如上所述,联接参数必须与参数的名称匹配。

lineJoin.on(criteriaBuilder.equal(root.get(Courses.student)

lineJoin.on(criteriaBuilder.equal(root.get("student")

lineJoin.on(criteriaBuilder.equal(root.get(Courses_.student)

要使用GET,您必须传递一个以字段名作为参数的字符串,或者使用元模型(以下划线结尾)

好了关于在条件查询中联接时出现错误&Quot;无法定位属性&Quot;的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。