Jakarta ee 意外标记“&引用;在JPA查询期间?

Jakarta ee 意外标记“&引用;在JPA查询期间?,jakarta-ee,jpa,java-ee-7,Jakarta Ee,Jpa,Java Ee 7,我正在尝试查询db2数据库中的Api键列表 问题是,JPA提供的实际查询有一个额外的比较字段,导致语法错误 错误: [ERROR ] CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "getApikeys" on bean "BeanId(WebApiConsole#WebApiConsole.war#ConsoleREST, null)". Exception d

我正在尝试查询db2数据库中的Api键列表

问题是,JPA提供的实际查询有一个额外的比较字段,导致语法错误

错误:

[ERROR   ] CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "getApikeys" on bean "BeanId(WebApiConsole#WebApiConsole.war#ConsoleREST, null)". Exception data: javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140222-22988a5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.ibm.db2.jcc.am.SqlSyntaxErrorException: An unexpected token "?" was found following "KEYS t1 WHERE ( LIKE".  Expected tokens may include:  "IN".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.16.53
Error Code: -104
Call: SELECT t1.APIKEYID, t1.APIKEY, t1.CREATEDAT, t1.PROJECTID FROM DB2ADMIN.PROJECTS t0, DB2ADMIN.APIKEYS t1 WHERE ( LIKE ? AND (t0.PROJECTID = t1.PROJECTID))
    bind => [1 parameter bound]
Query: ReadAllQuery(name="Apikey.queryAllByProject" referenceClass=Apikey sql="SELECT t1.APIKEYID, t1.APIKEY, t1.CREATEDAT, t1.PROJECTID FROM DB2ADMIN.PROJECTS t0, DB2ADMIN.APIKEYS t1 WHERE ( LIKE ? AND (t0.PROJECTID = t1.PROJECTID))")
摘录。我不知道为什么会出现问号

SELECT t1.APIKEYID, t1.APIKEY, t1.CREATEDAT, t1.PROJECTID FROM DB2ADMIN.PROJECTS t0, DB2ADMIN.APIKEYS t1 WHERE ( LIKE ? AND (t0.PROJECTID = t1.PROJECTID))
命名查询:

@NamedQuery(name    = "Apikey.queryAllByProject",
            query   = "SELECT k FROM Apikey k WHERE k.project LIKE :project")
最后,这里是jax rs应用程序代码:

Project p = (Project) em.createNamedQuery("Project.queryProjectById")
        .setParameter("projectid", Integer.parseInt(projectid)).getResultList().get(0);
List<JsonObject> apikeys = em.createNamedQuery("Apikey.queryAllByProject")
                        .setParameter("project", p)
                        .getResultList();
Project p=(Project)em.createNamedQuery(“Project.queryProjectById”)
.setParameter(“projectid”,Integer.parseInt(projectid)).getResultList().get(0);
List apikees=em.createNamedQuery(“Apikey.queryalByProject”)
.setParameter(“项目”,p)
.getResultList();
奇怪的是,如果我将其更改为以下内容,一切都会解决:

@NamedQuery(name    = "Apikey.queryAllByProject",
            query   = "SELECT k FROM Apikey k WHERE k.project.projectid LIKE :projectid")


List<JsonObject> apikeys = em.createNamedQuery("Apikey.queryAllByProject")
                        .setParameter("projectid", 10000)
                        .getResultList();
@NamedQuery(name=“Apikey.queryalByProject”,
query=“从Apikey k中选择k,其中k.project.projectid类似于:projectid”)
List apikees=em.createNamedQuery(“Apikey.queryalByProject”)
.setParameter(“projectid”,10000)
.getResultList();

LIKE
运算符不能用于比较两个实体,无法用SQL语言表达这一点。您需要根据匹配的id或其他条件获取它们。另请参见列出JPA运算符及其功能的表

不能在实体比较中使用“like”。由于行“(t0.PROJECTID=t1.PROJECTID)”,我以为JPA会自动使用id/fk列。非常感谢。