我遇到了一些问题,第一次进入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注释要求以逗号结尾。
感谢您抽出宝贵时间阅读我的问题,并提供任何见解。通常,编辑删除这个“谢谢”部分,我认为这是一个令人不愉快的编辑。
答案 0 :(得分:2)
NamedQuery是JPQL,而不是SQL。没有" *"和" DB_AUTH.USERS"是JPQL中的无效构造...必须引用相对于候选实体的实体(实体定义其架构的位置)。
如果要引用未映射到实体的表,则必须使用SQL查询(NamedNativeQuery)