本文介紹了在條件查詢中聯接時出現錯誤&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;的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,