Реализация кнопки Like в Spring Boot

В моем приложении пользователи могут размещать статьи. И другим пользователям могут понравиться эти статьи.

Класс статьи:

@Entity
public class Article {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "article_id")
    private int id;

    @Column(name = "article_title")
    private String articleTitle;

    @OneToMany(mappedBy = "event")
    private List<PeopleWhoLiked> peopleWhoLiked;
}

@Entity
public class PeopleWhoLiked {
    @EmbeddedId
    private PeopleWhoLiked id;
    @ManyToOne @MapsId("articleId")
    private Article article;
    @ManyToOne @MapsId("userId")
    private User user;
}

И есть сущность категории. Каждая статья имеет одну категорию.

public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "category_id")
    private int id;

    @NotEmpty
    @Column(name = "categoryName")
    private String categoryName;

    @OneToMany(mappedBy = "article")
    private List<Article> articleList;
}

Моя таблица лайков

Article_id User_id
x          x

Это оба внешних ключа для связанных таблиц.

С участием Функция category.getArticleList(); Я могу показывать статьи пользователям. Они могут ставить лайки, но дело в том, что система не знает, понравилась ли статья уже пользователю. Так что кнопка «Нравится» всегда активна.

Запрос (оператор выбора для каждой статьи в таблице Like) выглядит очень сложным по времени и перегружает систему.) Даже если я это сделаю, как я могу разместить это в операторе тимелеафа th:each только с объектом Article.

Я думаю, что запрос 10 подобных статей за раз с одним оператором выбора звучит хорошо. Но опять же, как я могу передать это тимелеафу с помощью объекта статьи.

0
0
635
1

Ответы 1

Ваша проблема с производительностью вызвана дополнительным запросом для каждой строки.

Для 1 выбора, возвращающего 100 строк, вы делаете дополнительные 100 выборок в базе данных.

Если вам нужно отобразить сложное представление построения результатов, а затем сопоставить результат представления вашему классу @Entity, который будет использоваться только для целей презентации.

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

Приложение Grails по умолчанию не развертывается на Tomcat
HQL-подобный запрос для длинного типа данных
Как отправить объект как свойство из формы
Есть ли ограничение на размер файла при загрузке файла из базы данных на Spring mvc?
Связующие ссылки в JSON с родительским не связывают резервную копию на один уровень, возможно, из-за двух ключей
Java, Spring: создание отдельного компонента источника данных вызывает ошибку NonUnique
Spring jpa многие ко многим удаляют только ассоциации
Удаление гибернации на дочернем элементе не работает, если есть другие дочерние элементы
Вложенное исключение - org.hibernate.MappingException: не удалось получить конструктор для org.hibernate.persister.entity.SingleTableEntityPersister
Не удалось внедрить автоматические зависимости; Не удалось выполнить автоматическое подключение поля; вложенное исключение в сервисах> DAO> HibernateTemplate> создание SessionFactory