Spring Data JPA строки автоматического упорядочения на основе редактируемого свойства позиции - PullRequest
0 голосов
/ 01 февраля 2020

Я создаю простое приложение ToDo, используя Spring Boot в Kotlin. Я новичок в обоих. Ниже приводится класс данных, который я использую для сохранения данных через JPA в базе данных MySQL.

@Entity @Table
data class Task(
        @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column val id: Long,
        @Column var title: String,
        @Column var isCompleted: Boolean
)

А это репозиторий JPA.

@Repository interface TaskRepository: JpaRepository<Task, Long>

У пользователя может быть список задач.

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

@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column var position: Int

Второе требование - пользователь может переупорядочить задачи. Так, например, пользователь может переместить задачу с 8-й позиции на 2-ю. Чтобы добиться этого, я думаю об увеличении позиции каждой задачи с 2 до 7 на одну, а затем об изменении позиции выбранной задачи до 2.

Я не знаю, как этого добиться с помощью одного запрос. Это вообще возможно? И это правильный способ сделать это?

Кроме того, если пользователь удаляет задачу, в идеале я бы хотел вычесть положение всех задач по одному. Но если это дорого, я могу обойтись без этого.

Мне очень понравилось соглашение Spring Boot относительно конфигурации конфигурации, поэтому я надеюсь, что должен быть более простой и лучший способ удовлетворить мои требования.

1 Ответ

0 голосов
/ 01 февраля 2020

Такая функциональность является частью JPA spe c и может быть реализована с помощью аннотации @OrderColumn.

https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/OrderColumn.html

Указывает столбец, который используется для поддержания постоянного порядка в списке. Постоянный провайдер отвечает за поддержание порядка при получении и в базе данных. Поставщик сохраняемости отвечает за обновление порядка при сбросе в базу данных, чтобы отразить любые вставки, удаления или переупорядочения, влияющие на список .

Таким образом, вы можете просто определить @OneToMany от пользователя к задаче и с этой дополнительной аннотацией поставщик JPA будет поддерживать столбец постоянного заказа на основе ваших манипуляций со списком.

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