Я не думаю, что findFirst будет работать, когда вы используете @Query, поскольку запрос будет построен из выражения HQL в @Query, а не из-за плавного API, передающего имя метода. Из-за этого, когда запрос возвращает несколько результатов, он сгенерирует исключение, так как Optional велит обернуть один возвращаемый объект, а не коллекцию. Добавьте предложение LIMIT к HQL-запросу, и все будет хорошо.