повторите попытку сохранения уникальной таблицы, пока не получите уникальное значение в jpa - PullRequest
0 голосов
/ 29 октября 2018

У меня есть таблица базы данных, похожая на:

CREATE TABLE tag (
    id uuid PRIMARY KEY,
    created_at timestamp without time zone,
    last_modified_at timestamp without time zone,
    title text NOT NULL,
    slug text UNIQUE
);

Кроме того, у меня есть файл сущности, где я объявляю его для jpa:

@Entity
@Table(name = "tag")
public class Tag extends BaseEntity implements Slugged {

    @Id
    @GeneratedValue
    @Column(columnDefinition = "uuid", updatable = false)
    private UUID id;

    @NotBlank
    @Column(columnDefinition = "text")
    private String title;

    @Column(columnDefinition = "text")
    private String slug;

    @Override
    public void slugify() {
        slug = new Slugify().slugify(title);
    }

}

@MappedSuperclass
public abstract class BaseEntity {

    @PrePersist
    @PreUpdate
    public void preSave() {
        if (this instanceof Slugged) {
            if ( StringUtils.isEmpty (((Slugged) this).getSlug()) ) {
                ((Slugged) this).slugify();
            }
        }
    }
}

Как вы можете видеть в BaseEntity, у меня есть PrePersist, где я устанавливаю слаг, который должен быть уникальным. Это в основном работает. Но иногда может случиться так, что пуля будет одинаковой для двух кортежей. В этом случае я хочу, чтобы у первого был оригинальный слаг, а у следующего - слаг и увеличивающееся число рядом с ним.

Пример:

title     | slug
------------------------
a b       | ab
ab        | ab1

Поскольку a b был создан первым, он получил слаг ab, и следующая запись с таким же слагом должна получить ab1

Каков наилучший способ архивировать это поведение?

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