簡體   English   中英

過濾器不能處理一對多關系的JPQL查詢

[英]Filter is not working on JPQL query of one to many relationship

我創建了以下課程,即老師和學生。

JAVA代碼:學生

@Entity
@Table(name="Student")

public class Student {

    @Id
    @Column(name = "cmp_id")
    private String cmpId;

    @OneToOne(cascade = CascadeType.REFRESH)
    @JoinColumn(name = "teacherid", referencedColumnName = "teacherid")
    private Teacher teacher;

    @OneToOne
    @JoinColumn(name = "typeid", referencedColumnName = "typeid")
    private Type type;
}

JAVA代碼:老師

@Entity
@Table(name="Teacher")
public class Teacher {

    @Id
    @Column(name = "teacherid")
    private String teacherid;

    @Column(name = "teachername")
    private String teachername;

    @OneToMany(mappedBy = "Teacher", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @OrderBy("cmpSequence ASC")
    private List<Student> std;
}

JAVA代碼:類型

@Entity
@Table(name="Type")
public class Type{

    @Id
    @Column(name = "typeid")
    private Integer typeid;

    @Column(name = "uitype")
    private String uitype;    
}

老師是家長班,學生是小學班。我希望所有老師和他們的學生使用過濾器typeid是1,但它不起作用。

以下是我創建的JPQL查詢:

SELECT teacher FROM Teacher teacher WHERE teacher.std.typeid = 1

它給了我以下錯誤:

java.lang.IllegalArgumentException:在EntityManager中創建查詢時發生異常:異常描述:編譯查詢時出現問題。狀態字段路徑“teacher.std.typeid”無法解析為有效類型。

你的查詢錯了。 你有Teacher有std( Student ),std有類型( Type )和類型有類型ID字段。 所以你的查詢應如下所示:

SELECT teacher FROM Teacher teacher 
JOIN FETCH teacher.std AS s 
INNER JOIN s.type as t 
WHERE t.typeid = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM