Hibernate HQL问题期待IDENT找到"*"

luk*_*rys 10 java sql hibernate

我需要从相对表中获取整个数据,所以我正在使用这样的思考(我会在sql中使用它)

    private static final String SELECT_OOPR_TO_SEND = "SELECT R.* " +
                                                      "FROM offerOrderProjectRel R, offerOrder O, project P " +
                                                      "WHERE P.id = R.project_id and O.id = R.offer_order_id " +
                                                      "and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')" ;
; 


    @SuppressWarnings("unchecked")
    public List<OfferOrderProjectRel> findAllOfferOrderToSendToSalesmans() {
        Query q = getSession().createQuery(SELECT_OOPR_TO_SEND);
        List<OfferOrderProjectRel> list = q.list();
        return list;
    }
Run Code Online (Sandbox Code Playgroud)

在推出这段代码之后,我收到了这个错误:

org.hibernate.hql.internal.ast.QuerySyntaxException:期待IDENT,在第1行第10列附近找到'*'[SELECT R. FROM offerOrderProjectRel R,offerOrder O,project P WHERE P.id = R.project_id and O.id = R.offer_order_id和O.type ='ORDER'和(P.status ='PENDING'或P.status ='PROTECTED')]

那么如何通过hibernate从列R获取所有数据呢?

use*_*946 34

该方法createQuery需要一个HQL查询字符串.

HQL是一种面向对象的查询语言.

HQL解释SELECT R.*为select *对象的成员字段R.

*不是成员领域R.是吗?..

要选择所有成员R使用字段:

SELECT R
FROM offerOrderProjectRel R, offerOrder O, project P
WHERE P.id = R.project_id and O.id = R.offer_order_id
and O.type = 'ORDER' and (P.status = 'PENDING' or P.status ='PROTECTED')
Run Code Online (Sandbox Code Playgroud)


Apo*_*los 5

你使用SQL查询,而不是hql查询,所以它应该是

Query q = getSession().createSQLQuery(SELECT_OOPR_TO_SEND);
Run Code Online (Sandbox Code Playgroud)


sel*_*rer 5

对于在使用时收到“预期 IDENT 发现 \xe2\x80\x9c*\xe2\x80\x9d”错误org.springframework.data.jpa.repository.Query并发现此问题的人,我将补充一点,您可以将标志更改nativeQuerytrue

\n\n
@Query(value = "SELECT * FROM table1", nativeQuery = true)\nList<Object> myFindAll();\n
Run Code Online (Sandbox Code Playgroud)\n