>我创建了以下类,即教师和学生。
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;
}
老师是家长班,学生是孩子班。我希望所有教师和他们的学生的过滤器类型id为1,但它不起作用。
以下是我创建的 JPQL 查询:
SELECT teacher FROM Teacher teacher WHERE teacher.std.typeid = 1
它给了我以下错误:
java.lang.IllegalArgumentException:发生异常时 在实体管理器中创建查询:异常说明:问题 编译查询。状态字段路径"teacher.std.typeid"不能 解析为有效类型。
您的查询是错误的。你有Teacher
有std(Student
),std有类型(Type
)和类型有typeid字段。因此,您的查询应如下所示:
SELECT teacher FROM Teacher teacher
JOIN FETCH teacher.std AS s
INNER JOIN s.type as t
WHERE t.typeid = 1