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

时间:2018-10-23 07:09:06

标签: java jpa join nativequery

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

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

在我的Dokument-Entity中,我现在想通过按其Dokument和其hash-value进行搜索来获取特定的foreign-key (BenutzerID)-我正试图通过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“ FROM,{”   SQL语句“ FINDDOKUMENTBYHASHANDBENUTZERID []”中的语法错误;预期的“ FROM,{”; 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

1 个答案:

答案 0 :(得分:0)

基于例外情况,我猜您会致电

 entityManager.createQuery("findDokumentByHashAndBenutzerID");

代替

 entityManager.createNamedQuery("findDokumentByHashAndBenutzerID");