简体   繁体   English

Java / JPA:具有联接的命名本机查询会引发异常

[英]Java/JPA: Named Native Query with Join throws Exception

In my Benutzer-Entity I have following OneToMany Relationship: 在我的Benutzer-Entity我具有以下OneToMany关系:

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

In my Dokument-Entity I'd now like to get a specific Dokument by searching it by its hash-value and its foreign-key (BenutzerID) - I'm trying to do this by NamedNativeQuery : 现在,在我的Dokument-Entity我想通过按其hash-valueNamedNativeQuery foreign-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 = ?")
})

When I use this Query in my Database (H2) it works, but in Java i get following exception: 当我在数据库(H2)中使用此查询时,它可以工作,但是在Java中,出现以下异常:

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.h2.jdbc.JdbcSQLException: Syntax Fehler in SQL Befehl "FINDDOKUMENTBYHASHANDBENUTZERID[ ] "; javax.persistence.PersistenceException:异常[EclipseLink-4002](Eclipse Persistence Services-2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DatabaseException内部异常:org.h2.jdbc.JdbcSQLException:SQL中的语法费勒Befehl“ FINDDOKUMENTBYHASHANDBENUTZERID [ ]”; erwartet "FROM, {" Syntax error in SQL statement "FINDDOKUMENTBYHASHANDBENUTZERID[ ] "; erwartet“ FROM,{” SQL语句“ FINDDOKUMENTBYHASHANDBENUTZERID [ ]”中的语法错误 expected "FROM, {"; 预期的“ FROM,{”; SQL statement: findDokumentByHashAndBenutzerID [42001-197] Error Code: 42001 Call: findDokumentByHashAndBenutzerID Query: ReadAllQuery(referenceClass=Dokument sql="findDokumentByHashAndBenutzerID") at org.eclipse.persistence.internal.jpa.QueryImpl.getDetailedException(QueryImpl.java:377) at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260) at org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult(QueryImpl.java:516) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:400) at ch.insidebfh.persistence.repository.Repository.findByHash(Repository.java:91) at ch.insidebfh.application.service.ServiceHelper.findByHash(ServiceHelper.java:18) at ch.insidebfh.application.demo.Sandbox$1.lambda$0(Sandbox.java:92) at java.util.ArrayList.forEach(Unknown Source) at ch.insidebfh.application.demo.Sandbox$1.run(Sandbox.java:91) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPo SQL语句:findDokumentByHashAndBenutzerID [42001-197]错误代码:42001调用:findDokumentByHashAndBenutzerID查询:ReadAllQuery(referenceClass = Dokument sql =“ findDokumentByHashAndBenutzerID”)在org.eclipse.persistence.internal.jpa.QueryImpl.Detail在org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:260)在org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult(QueryImpl.java:516)在org.eclipse.persistence.internal位于ch.insidebfh.persistence.repository.Repository.findByHash(Repository.java:91)的.jpa.EJBQueryImpl.getSingleResult(EJBQueryImpl.java:400)位于ch.insidebfh.application.service.ServiceHelper.findByHash(ServiceHelper.java:18) )位于ch.insidebfh.application.demo.Sandbox $ 1.lambda $ 0(Sandbox.java:92)位于ch.insidebfh.application.demo.Sandbox $ 1.run(Sandbox.java.util.ArrayList.forEach(Unknown Source)处。 java:91),位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源),位于java.util.concurrent.ThreadPo olExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException olExecutor $ Worker.run(未知源),位于java.lang.Thread.run(未知源)原因:异常[EclipseLink-4002](Eclipse Persistence Services-2.5.0.v20130507-3faac2b):org.eclipse.persistence。 exceptions.DatabaseException

Based on the exception I would guess that you call 根据例外情况,我猜您会打电话给

 entityManager.createQuery("findDokumentByHashAndBenutzerID");

instead of 代替

 entityManager.createNamedQuery("findDokumentByHashAndBenutzerID");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM