Проблемы, связанные с повторным созданием твиттера с использованием Spring Boot - PullRequest
0 голосов
/ 11 мая 2018

Я снова

Быстрый вопрос относительно JpaRepository

Я работаю над зеркальным проектом Twitter, используя Spring boot и Hibernate. Я завершил создание большинства функций Twitter - публикация, пересылка, комментирование и т. Д. Теперь я работаю над тем, чтобы сделать это веб-приложение более удобным для пользователя, особенно в том, как приложение загружает сообщения из базы данных.

В настоящее время мое приложение работает следующим образом: каждый раз, когда пользователь входит в систему, система загружает все сообщения из его / ее "списка подписчиков", что нехорошо, поскольку, если этот пользователь следует сотням людей, возможно, существуют десятки пользователей. одновременно загружаются тысячи сообщений, что не только создает огромную нагрузку на сервер, но и стоит терпения пользователя.

Итак, я хочу перейти на другой способ загрузки сообщений. В настоящее время я имею это в виду:

Каждый раз, когда пользователь входит в систему, будет «lastLoginTime», созданный с помощью @LastModifiedTime. Каждый раз, когда кто-то что-то публикует, будет «postTime», созданный с помощью @CreatedTime. Каждый раз, когда пользователь входит в систему, сервер загружает публикации, опубликованные не позднее, чем за 24 часа до последнего входа в систему.

Чтобы быть более конкретным. Предположим, я захожу в систему в 8:00 утра. Предполагается, что система загружает сообщения, опубликованные ПОСЛЕ 8:00 вчера.

Так как я использую JpaRepository. Я намерен использовать @Query для аннотирования метода. Но я просто не могу придумать, как написать хороший JPQL для достижения этой цели. Кто-нибудь может мне помочь с этим? Я уже закончил создание lastLoginTime и postTime - кстати.

Заранее спасибо С уважением

'

1 Ответ

0 голосов
/ 18 мая 2018

К сожалению, Hibernate не имеет много функций даты. Итак, вам нужно попытаться вызвать встроенную функцию DATE вашей базы данных, чтобы сделать это. Другой альтернативой всегда является сохранение в новом столбце с информацией о дате публикации за один день до исходной даты публикации.

С новым столбцом вы можете просто:

SELECT post FROM Post post 
WHERE post.postTimeToLoad >= 
    (SELECT user.lastLoginTime FROM User user WHERE user.id = :idLoggerUser)

Если вы можете использовать встроенные функции из вашей базы данных, посмотрите этот пример MySql с использованием функции DATE_SUB:

SELECT post FROM Post post 
WHERE DATE(DATE_SUB(post.postTime, INTERVAL 1 DAY)) >= 
    (SELECT user.lastLoginTime FROM User user WHERE user.id = :idLoggerUser)
...