【问题标题】:Java/JPA: Named Native Query with Join throws ExceptionJava/JPA:带连接的命名本机查询抛出异常
【发布时间】:2019-03-27 08:10:54
【问题描述】:

在我的Benutzer-Entity 我有以下OneToMany 关系:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="BENUTZER_ID")
private List<Dokument> dokumente = new ArrayList<>();

在我的Dokument-Entity 中,我现在想通过hash-valueforeign-key (BenutzerID) 搜索来获得一个特定的Dokument - 我正在尝试通过NamedNativeQuery 来做到这一点:

@NamedNativeQueries({
  @NamedNativeQuery(
    name="findDokumentByHashAndBenutzerID",
    query="SELECT d.* FROM Dokument d "
            + "JOIN Benutzer b ON d.Benutzer_id = b.Id_Benutzer WHERE d.Benutzer_id = ? AND d.Hash = ?")
})

当我在我的数据库 (H2) 中使用此查询时,它可以工作,但在 Java 中我得到以下异常:

javax.persistence.PersistenceException: 异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException 内部异常:org.h2.jdbc.JdbcSQLException:SQL Befehl 中的语法 Fehler “FINDDOKUMENTBYHASHANDBENUTZERID[]”; erwartet“来自,{” SQL 语句“FINDDOKUMENTBYHASANDBENUTZERID[]”中的语法错误;预期“来自,{”; SQL 语句: findDokumentByHashAndBenutzerID [42001-197] 错误代码:42001 调用:findDokumentByHashAndBenutzerID 查询:ReadAllQuery(referenceClass=Dokument sql="findDokumentByHashAndBenutzerID") 在 org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:377) 在 org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260) 在 org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult(QueryImpl.java:516) 在 org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:400) 在 ch.insidebfh.persistence.repository.Repository.findByHash(Repository.java:91) 在 ch.insidebfh.application.service.ServiceHelper.findByHash(ServiceHelper.java:18) 在 ch.insidebfh.application.demo.Sandbox$1.lambda$0(Sandbox.java:92) 在 java.util.ArrayList.forEach(未知来源) 在 ch.insidebfh.application.demo.Sandbox$1.run(Sandbox.java:91) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 原因:异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException

【问题讨论】:

  • 请将异常添加为文本,而不是图像。
  • 感谢您的反馈 - 我将异常添加为文本。

标签: java jpa join nativequery


【解决方案1】:

根据异常我猜你打电话

 entityManager.createQuery("findDokumentByHashAndBenutzerID");

而不是

 entityManager.createNamedQuery("findDokumentByHashAndBenutzerID");

【讨论】:

  • 谢谢你,你是我的男人!我用entityManager.createNativeQuery()而不是entityManager.createNamedQuery()
猜你喜欢
  • 2013-11-13
  • 1970-01-01
  • 2019-10-15
  • 2011-05-31
  • 1970-01-01
  • 2017-04-21
  • 2014-09-11
  • 1970-01-01
  • 2015-04-11
相关资源
最近更新 更多