有沒有人知道如何去設計類似於這裏使用的標籤系統,在stackoverflow?標籤系統來替換Spring中的類別 - Hibernate java project
任何可以解釋如何使用hibernate/spring來實現這個系統的鏈接都很棒。
我只是在尋找一些出發點。
有沒有人知道如何去設計類似於這裏使用的標籤系統,在stackoverflow?標籤系統來替換Spring中的類別 - Hibernate java project
任何可以解釋如何使用hibernate/spring來實現這個系統的鏈接都很棒。
我只是在尋找一些出發點。
我建議開始有三個Entities
,一個正在被標記的對象(在SO例子的情況下,這將是一個Post
),一個牽着你的標籤定義(你可以調用這個Tag
),以及兩者之間的映射(稱爲這一個TaggedPost
)。
然後分配的基本過程Tag
到Post
雲一樣的東西:
Tag
已經存在,如果是,利用現有的一個,否則插入一個新的。TaggedPost
實例從步驟1鏈接Post
與Tag
要從Post
你只是刪除相應的TaggedPost
實體刪除Tag
。
您可以使用Hibernate註釋將適用於給定Post
的標記集作爲Java集合公開,以便您可以僅說getTags()
即可獲取所有標記。並且您可以在Tag
上做同樣的事情,以便您可以說getPosts()
以獲得具有給定Tag
的所有帖子。
aroth對三個實體的回答是完全有效的,但我們僅使用兩個實體做同樣的事情,因爲第三個實體(即TaggedPost
)不會爲我們增加任何價值。
我們的實體是這個樣子:
@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"),
[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
數千每次顯示一個標記時間的記錄。Comparator
與@Sort
註釋