我创建了以下类,即教师和学生。过滤器无法处理一对多关系的JPQL查询
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;
}
教师是父类和学生是孩子class.I希望所有教师和他们的学生与过滤typeid是1,但它不起作用。
以下是JPQL查询,我创建了:
SELECT teacher FROM Teacher teacher WHERE teacher.std.typeid = 1
它给了我以下错误:
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Problem compiling query.The state field path 'teacher.std.typeid' cannot be resolved to a valid type.
的可能的复制[JPQL:状态字段路径不能解析为一个有效的类型(https://stackoverflow.com/questions/20056847/jpql-the-state -field-path-can-be-resolved-to-a-valid-type) – Nikolas
,因为你的JPQL是无稽之谈。您不能在WHERE子句中通过它们引用多值字段,您必须执行显式JOIN。但是,然后任何基本的JPA文档将包括这 – DN1