MySQLSyntaxErrorException в интерфейсе репозитория

Я использую код ниже:

@RestResource(exported = false)
public interface TransactionRepository extends CrudRepository<Transaction, Long> {

@Query(value = "SELECT " +
        "    new com.test.technical.dto.TopMemberDTO(m.id, m.name, m.email, COUNT(t.book_id)) " +
        "FROM " +
        "    member m JOIN transaction t where m.id = t.member_id and t.date_of_issue >= :dateOfIssue and t.date_of_return <= :dateOfReturn " +
        "GROUP BY t.member_id ORDER BY COUNT(t.book_id) DESC limit 5", nativeQuery = true)


List<TopMemberDTO> getTopMembers(@Param("dateOfIssue") LocalDateTime dateOfIssue, @Param("dateOfReturn") LocalDateTime dateOfReturn); 

Ошибка:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы найти правильный синтаксис рядом с '.test.technical.dto.TopMemberDTO (m.id, m.name, m.email, COUNT (t.book_id)) F' в строке 1

это MySQL или MS SQL?

Alex 24.12.2018 15:29

@Alex: это MySQL

user6192706 24.12.2018 15:30

Я никогда не видел SELECT new .... в MySQL, вы можете дать мне ссылку на то, что это означает?

Alex 24.12.2018 15:32

Когда мы хотим получить результат от БД и хотим, чтобы этот результат автоматически отображался в нашем классе [TopMemberDTO], мы используем его.

user6192706 24.12.2018 15:33

это Java-код? какая-то библиотека? пометьте их!

Alex 24.12.2018 15:34
stackoverflow.com/questions/36328063/…
user6192706 24.12.2018 15:40

Вы не можете использовать синтаксис new в запросе SQL, только в запросе JPQL вы можете его использовать.

M. Deinum 24.12.2018 16:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
171
1

Ответы 1

Вы используете jpql и говорите, что это nativeQuery = true, вам нужно его изменить. Такого рода запросы я использую таким образом.

@Entity
@Table(name = "TABLE")
@NamedQueries({
    @NamedQuery(name = "ANYIDENTIFIER", query = "select new example.DTO(rp.example) from 
RemesaProceso rp where rp.vigente = true and rp.proceso.idProceso = :idProceso order by rp.remesaId asc")
})

А в другом классе я возвращаю список DTO

return entityManager.createNamedQuery("ANYIDENTIFIER").setParameter("idProceso ", 2).getSingleResult();

Другие вопросы по теме