java - JPA - 我的命名查询不起作用

标签 java mysql jpa

我遇到了一些问题,这是我第一次进入 JPA。这是我想作为 @NamedQuery 放入的查询,并且此 SQL 有效。

select t1.*, t2.SHORT_NAME from ePluribusWS.GRAPH_ACL t1 join DB_AUTH.USERS t2 on t1.USER_ID = t2.ID where GRAPH_ID = 31611 ;

我不确定这是否在 JPA 中受支持,因为我正在跨不同数据库但在同一服务器中执行 JOIN。 SQL 运行良好。

当我尝试将其添加为命名查询(下面的第三个)时,我收到一条错误消息(语法错误解析)“路径表达式不能以逗号结尾”,这是唯一的 Google 显示给我的生成错误消息的 JPA 源代码。

@Entity
@Table(name = "GRAPH_ACL", catalog = "ePluribusWS", schema = "")
@XmlRootElement
@NamedQueries({
.
.
    @NamedQuery(name = "EPluribusACLEntryRecord.findByUserId", query = "SELECT g FROM ACLEntryRecord g WHERE g.userId = :userId"),
    @NamedQuery(name = "EPluribusACLEntryRecord.findByGraphId", query = "SELECT t1.*, t2.SHORT_NAME FROM ACLEntryRecord t1 JOIN DB_AUTH.USERS t2 ON t1.USER_ID = t2.ID WHERE t1.GRAPH_ID = :graphId"),
    @NamedQuery(name = "EPluribusACLEntryRecord.findByCreated", query = "SELECT g FROM ACLEntryRecord g WHERE g.created = :created"),

我有点困惑,因为看起来 JPA 注释要求它们以逗号结尾。

感谢您花时间阅读我的问题,并提供任何见解。通常,编辑会删除这个“感谢”部分,我认为这是一种令人不快的编辑。

最佳答案

NamedQuery 是 JPQL,而不是 SQL。没有“*”并且“DB_AUTH.USERS”在 JPQL 中是无效的构造......必须引用与候选实体相关的实体(实体定义其模式所在的位置)。

如果您想引用未映射到实体的表,则必须使用 SQL 查询 (NamedNativeQuery)

关于java - JPA - 我的命名查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789752/

相关文章:

java - 如何针对这种情况创建 hibernate 映射?

mysql union 语句与 order by

java - JDBC连接异常 : Unable to acquire JDBC Connection when using JPA

java - spring jpa中根据实体从多个表中获取数据

Java char 数组似乎每个 char 需要超过 2 个字节

java - 如何使用可用内存作为参数通过 Guava Cache 缓存数据?

java - 构建简单窗口时出错?

mysql - 在 XAMPP 上的 phpmyadmin 中删除了用户

java - Android 带有数字的字符串资源