package am.ik.categolj2.domain.model; import am.ik.categolj2.domain.validation.TagName; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; import javax.persistence.*; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Comparator; import java.util.List; import java.util.Objects; @Entity @Table(name = "TAG") @NoArgsConstructor @AllArgsConstructor @Data @ToString(exclude = {"entries"}) @EqualsAndHashCode(exclude = {"entries"}, callSuper = false) public class Tag implements Comparable<Tag>, Serializable { @Id @NotNull @TagName @Column(name = "TAG_NAME") @DocumentId(name = "id") @Field private String tagName; @ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY) @JsonIgnore private List<Entry> entries; public Tag(String tagName) { this.tagName = tagName; } @Override public int compareTo(Tag o) { return Objects.compare(this, o, Comparator.comparing(Tag::getTagName)); } }