join in criteria query giving error quot;Unable to locate Attribute quot;(在条件查询中联接时出现错误Quot;无法定位属性Quot;)
本文介绍了在条件查询中联接时出现错误&Quot;无法定位属性&Quot;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两张桌子:学生和课程。我必须联接两个表并获取特定的字段。
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;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在条件查询中联接时出现错误&Quot;无法定位属性&Quot;
基础教程推荐
猜你喜欢
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01