本文介紹了在條件查詢中聯(lián)接時(shí)出現(xiàn)錯(cuò)誤&Quot;無法定位屬性&Quot;的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有兩張桌子:學(xué)生和課程。我必須聯(lián)接兩個(gè)表并獲取特定的字段。
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)));
我在此托管類型[家長(zhǎng)]上找不到具有給定名稱[學(xué)生]的屬性
有人能幫我把這兩張桌子連在一起嗎?我知道我把這兩張桌子連在一起做錯(cuò)了什么。
推薦答案
我將更改以下內(nèi)容:
@OneToMany(fetch = FetchType.LAZY, mappedBy = courses.student,...
@OneToMany(fetch = FetchType.LAZY, mappedBy = student,...
您必須指明目標(biāo)類的參數(shù),它是在參數(shù)類型(Set)中定義的。
Join<Student,Courses> lineJoin = root.join("Courses",JoinType.INNER);
Join<Student,Courses> lineJoin = root.join("coursesList",JoinType.INNER);
如上所述,聯(lián)接參數(shù)必須與參數(shù)的名稱匹配。
lineJoin.on(criteriaBuilder.equal(root.get(Courses.student)
lineJoin.on(criteriaBuilder.equal(root.get("student")
或
lineJoin.on(criteriaBuilder.equal(root.get(Courses_.student)
要使用GET,您必須傳遞一個(gè)以字段名作為參數(shù)的字符串,或者使用元模型(以下劃線結(jié)尾)
這篇關(guān)于在條件查詢中聯(lián)接時(shí)出現(xiàn)錯(cuò)誤&Quot;無法定位屬性&Quot;的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,