Java / JPA: именованный собственный запрос с соединением создает исключение - PullRequest
0 голосов
/ 23 октября 2018

В моем 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: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException Внутреннее исключение: org.h2.jdbc.JdbcSQLException: синтаксис Fehler в SQL Befehl "FINDDOKUMENTBYHASHANDBENUTZERID []";erwartet "FROM, {" Синтаксическая ошибка в выражении SQL "FINDDOKUMENTBYHASHANDBENUTZERID []";ожидается "ОТ, {";Оператор SQL: findDokumentByHashAndBenutzerID [42001-197] Код ошибки: 42001 Вызов: findDokumentByHashAndBenutzerID Запрос: ReadAllQuery (referenceClass = Dokument sql = "findDokumentByHashAndBenutzerID") в качестве org.jpgв org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery (QueryImpl.java:260) в org.eclipse.persistence.internal.jpa.QueryImpl.getSingleResult (QueryImpl.java:516sese) in org.eclip.jpa.EJBQueryImpl.getSingleResult (EJBQueryImpl.java:400) в ch.insidebfh.persistence.repository.Repository.findByHash (Repository.java:91) в ch.insidebfh.application.service.ServiceHelper.fH) в ch.insidebfh.application.demo.Sandbox $ 1.lambda $ 0 (Sandbox.java:92) в java.util.ArrayList.forEach (неизвестный источник) в ch.insidebfh.application.demo.Sandbox $ 1.run (Песочница.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.Exception.DatabaseException

1 Ответ

0 голосов
/ 23 октября 2018

Исходя из исключения, я бы предположил, что вы звоните

 entityManager.createQuery("findDokumentByHashAndBenutzerID");

вместо

 entityManager.createNamedQuery("findDokumentByHashAndBenutzerID");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...