Java Hibernate HQL问题期望找到标识“*&引用;
我需要从相对表中获取所有数据,所以我使用了类似这样的方法(我会在sql中使用它)Java Hibernate HQL问题期望找到标识“*&引用;,java,sql,hibernate,Java,Sql,Hibernate,我需要从相对表中获取所有数据,所以我使用了类似这样的方法(我会在sql中使用它) private static final String SELECT\u OOPR\u TO\u SEND=“SELECT R.*”+ “来自报价人项目R、报价人O、项目P”+ “其中P.id=R.project\u id和O.id=R.offer\u order\u id”+ “和O.type='ORDER'和(P.status='PENDING'或P.status='PROTECTED')”; ; @抑制警告
private static final String SELECT\u OOPR\u TO\u SEND=“SELECT R.*”+
“来自报价人项目R、报价人O、项目P”+
“其中P.id=R.project\u id和O.id=R.offer\u order\u id”+
“和O.type='ORDER'和(P.status='PENDING'或P.status='PROTECTED')”;
;
@抑制警告(“未选中”)
公共列表findAllOfferOrderToSendToSalesmans(){
Query q=getSession().createQuery(选择要发送的对象);
List=q.List();
退货清单;
}
在启动此代码后,我得到一个错误:
org.hibernate.hql.internal.ast.QuerySyntaxException:应为标识,
在第1行第10列附近找到“*”[从OfferDerProjectRel中选择R
R、 报价人O,项目P,其中P.id=R.project\u id和O.id=
R.offer\u order\u id和O.type='order'和(P.status='PENDING'或
P.status='PROTECTED')]
那么,如何使用hibernate从R列获取所有数据呢?您使用的是SQL查询,而不是hql查询,所以应该是
Query q = getSession().createSQLQuery(SELECT_OOPR_TO_SEND);
该方法需要一个HQL查询字符串
HQL是一种新的语言
HQL将SELECT R.*
解释为选择对象R
的成员字段*
但是*
不是R
的成员字段。是吗
要选择R
的所有成员字段,请使用:
选择R
来自报价人项目R、报价人O、项目P
其中P.id=R.project\u id和O.id=R.offer\u order\u id
和O.type='ORDER'和(P.status='PENDING'或P.status='PROTECTED')
对于在使用org.springframework.data.jpa.repository.Query时收到“expecting Identit found”*”错误并发现此问题的人,我要补充一点,您可以将nativeQuery
标志更改为true
:
@Query(value = "SELECT * FROM table1", nativeQuery = true)
List<Object> myFindAll();
@Query(value=“SELECT*fromtable1”,nativeQuery=true)
列出myFindAll();
您是否只尝试了R而不是R*?请编辑查询以“从中选择R”。省略R.*这是HQL语法。HQL用于实体、字段和关联。从不使用表和列。它与SQL不同。如果是,它将被命名为SQL。阅读Hibernate文档。谢谢你们,是的,我必须阅读文档,我的错。谢谢使用EntityManager时,如何使用getSession()?您不使用getSession()。您需要的是SessionFactory而不是EntityManager
@Query(value = "SELECT * FROM table1", nativeQuery = true)
List<Object> myFindAll();