У меня есть таблица базы данных, похожая на:
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
Каков наилучший способ архивировать это поведение?