休眠 - 选择表中的所有行

时间:2017-11-21 10:08:09

标签: java mysql hibernate

我试图让我的查询加载表中的所有行,我正在使用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]

4 个答案:

答案 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映射)。