누가 stackoverflow에서 여기에 사용 된 것과 유사한 태그 시스템을 설계하는 방법을 알고 있습니까?Spring의 카테고리를 대체하는 태그 시스템 - Hibernate java 프로젝트
이 시스템을 최대 절전 모드/봄 모드로 구현하는 방법을 설명하는 링크는 모두 훌륭합니다.
저는 시작 지점을 찾고 있습니다.
누가 stackoverflow에서 여기에 사용 된 것과 유사한 태그 시스템을 설계하는 방법을 알고 있습니까?Spring의 카테고리를 대체하는 태그 시스템 - Hibernate java 프로젝트
이 시스템을 최대 절전 모드/봄 모드로 구현하는 방법을 설명하는 링크는 모두 훌륭합니다.
저는 시작 지점을 찾고 있습니다.
Entities
으로 시작하는 것이 좋습니다. 태그가있는 객체 (예 :이 경우는 Post
), 태그 정의를 유지하는 객체 (이 코드는 Tag
), 둘 사이의 매핑을위한 하나 (TaggedPost
). 지정된 이름을 가진 Tag
이 이미 존재하는 경우 예, 그렇지 않으면 새로 삽입, 기존의 하나를 사용하는 경우
그런 다음 할당의 기본 과정은 Tag
Post
A와 같은 간다.
TaggedPost
엔티티를 삭제하려면 Post
에서 Tag
을 제거하려면 1 단계에서 Tag
와 Post
을 연결하는 새로운 TaggedPost
인스턴스를 만듭니다.
Hibernate 주석을 사용하여 주어진 Post
에 적용되는 태그 집합을 Java Collections로 노출하여 모든 태그를 얻는 데 단지 getTags()
이라고 말할 수 있습니다. Tag
에서 동일한 작업을 수행하면 getPosts()
이라고 말하면서 주어진 게시물이 모두 Tag
일 수 있습니다.
aroth의 세 엔티티 답변이 완벽하게 유효하지만 세 번째 엔티티 (즉, TaggedPost
)가 Google에 어떤 값도 추가하지 않기 때문에 두 엔티티 만 사용하여 동일한 작업을 수행합니다.
우리의 실체는 다음과 같이 보일 :
@Entity
@Table(name = "Tag")
public class Tag {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name="PostTag",
[email protected](name="TagId"),
[email protected](name="PostId")
)
@ForeignKey(name="FK_Tag_Post", inverseName="FK_Post_Tag")
private Set<Post> posts;
/* ... */
}
@Entity
@Table(name = "Post")
public class Post {
@ManyToMany
@JoinTable(
name="PostTag",
[email protected](name="PostId"),
inverseJoinCol[email protected](name="TagId")
)
@ForeignKey(name="FK_Post_Tag", inverseName="FK_Tag_Post")
@Sort(comparator=CompareTagByName.class, type=SortType.COMPARATOR)
private SortedSet<Tag> tags;
/* ... */
}
장점은 우리가 수동으로 조인을 유지할 필요가 없다는 것입니다. 필요에 따라 각 Post
에서 Tag
을 추가하거나 삭제하면됩니다. 또한
참고 : Tag.posts
에
Post
수천로드 최대 절전 모드가 발생할 수 있습니다는 태그가 표시 될 때마다 기록합니다.@Sort
주석Comparator
를 제공함으로써, 알파벳 순으로 태그를 정렬하기가 쉽습니다