如何在 EclipseLink JPQL 查询中指定架构?

How do I specify the schema in EclipseLink JPQL query?

当我执行下面的查询时,我得到了异常。如何在 JPQL 查询中指定模式。我的数据库模式是 public。数据库是 PostgreSQL。

这是我的查询:

SELECT p FROM profile p WHERE p.mobile_no = :mobileNo

例外情况:

java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Problem compiling [SELECT p FROM profile p WHERE p.mobile_no = :mobileNo]. 
[14, 21] The abstract schema type 'profile' is unknown.
[30, 41] The state field path 'p.mobile_no' cannot be resolved to a valid type.
    org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1746)
    org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1767)
    za.co.ezimax.database.ProfileDAO.get(ProfileDAO.java:15)
    za.co.ezimax.business.Business.register(Business.java:44)
    za.co.ezimax.rest.DatabaseTestServlet.doGet(DatabaseTestServlet.java:87)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

How do I specify the schema in a JPQL query?

架构配置不低于查询本身。它在数据源中配置。

请记住,您实际上是在写 JPQL (and not SQL)。因此,您针对实体而不是针对 table 编写查询。话虽如此,您应该使用实体名称和实体字段而不是 table 名称和 table 列。

而不是profile,你应该使用Profile(大写P):

SELECT p FROM Profile p WHERE p.mobile_no = :mobileNo

还要确保 mobile_no 是您 Profile 实体中的字段名称(而不是数据库 table 中的列名称)。