我有一个类似的数据库表:
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
归档此行为的最佳方法是什么?