我遇到了一些问题,这是我第一次进入 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/