我试图让我的查询加载表中的所有行,我正在使用hibernate。
@Override
public List<Teacher> getTeachersBySubject(Subject subject) {
List<Teacher> teachersBySubject = entityManager.createQuery("SELECT * FROM teacher t INNER JOIN teacher_subject ts on t.email = ts.email")
.getResultList();
return teachersBySubject;
}
*(全部)给出处理的错误,因为休眠而不会加载
我得到的错误是:org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [SELECT * FROM com.scalda.vos.models.Teacher t INNER JOIN teacher_subject ts on t.email = ts.email]
答案 0 :(得分:0)
您编写了一个本机查询,必须使用createNativeQuery
方法编译。
createQuery
期望HQL而不是本机SQL,因此要在HQL中使用“teacher FROM Teacher”。此外,如果您只是检索教师而不是教师 - 主题混合,那么Hibernate也可以帮助您检索关联检查this
答案 1 :(得分:0)
它不是原生的,你写的是hql所以用t替换*。
答案 2 :(得分:0)
作为我的建议,在hibernate中使用hql来清除代码或使用criteria
但是,仍然在本地运行良好。
对于本机SQL,请使用createSqlQuery
,例如:
List<Teacher> teachersBySubject = entityManager.createSqlQuery("SELECT * FROM teacher t INNER JOIN teacher_subject ts on t.email = ts.email")
.getResultList();
答案 3 :(得分:0)
HIbernate希望你使用JPQL,它看起来像SQL,但应该是这样的:
SELECT t FROM teacher t JOIN t.subject
当然,这取决于您对Teacher类的注释方式(ManyToMany,OneToMany映射)。