JPA 中的 nativeQuery

Posted

技术标签:

【中文标题】JPA 中的 nativeQuery【英文标题】:nativeQuery in JPA 【发布时间】:2015-06-22 11:21:53 【问题描述】:

我是 JPA 的新手。

我正在尝试在 3 个表上创建一个具有 3 个连接的本地查询。

我写了一个类似于下面的原生查询:

Query query=entityManager.createNativeQuery("select p.value,m.value,t.value,t.value from ping as p,ming as m,ting as t where p.id=m.vid and m.id=t.vid");

List<Object[]> list = (List<Object[]>) query.getResultList();

我的数据库中有 3 个表 ping、ming、ting。

我在执行过程中遇到语法错误。

check the manual that corresponds to your mysql server version for the right syntax to use near 'ping as p,ming as m ,ting as t';

如果有人能指出错误以及在 JPA 中通过 nativequery 连接不同表的更好解决方案是什么,将会很有帮助。

编辑:我已经在 mysql 上成功运行了上述查询。

【问题讨论】:

您是否尝试使用其他工具(例如命令行客户端、phpMyAdmin 或您正在使用的任何 MySQL 工具)运行该查询? 在mysql中运行这个select p.value,m.value,t.value,t.value from ping as p,ming as m,ting as t where p.id=m.vid and m.id=t.vid并检查它是否正确 我可以在mysql提示符下成功运行上述查询 @starkk92 删除一个 t.value 并尝试。如果这不起作用,请尝试 select p.value,m.value as value1,t.value as value2 from ping as p inner join ming as m on p.id=m.vid inner join ting as t on m.id=t.vid 并让我知道您是否成功 我已经尝试过了,它在提示符下工作正常,而不是在代码中。 【参考方案1】:

'ping as p,ming as m ,ting as t'

尝试用点代替昏迷。

也许你的语法不正确

【讨论】:

文档?你是说dot吗? 点,是的。对不起我的英语不好:(【参考方案2】:

列上的别名是如何导致问题的。

我尝试在列上不带别名的情况下运行程序,一切都很好。

在这里找到了类似的问题。 hibernate native SQL query error

【讨论】:

以上是关于JPA 中的 nativeQuery的主要内容,如果未能解决你的问题,请参考以下文章

jpa中的重置序列

WildFly 中的 JPA 共享缓存/二级缓存

JPA 一个实体中的两个惰性集合 - 如何运行 JPA 查询以获取实体和只有一个集合

JPA 中的 @Any 等价于啥?

Apache Felix 中的 JPA / Hibernate 集成

JPA 中的 nativeQuery