有谁知道如何设计类似于 stackoverflow 上使用的标签系统?
任何能够解释如何使用 hibernate/spring 实现这个系统的链接都会很棒。
我只是在寻找一些起点。
最佳答案
aroth 对三个实体的回答是完全有效的,但我们只使用两个实体做同样的事情,因为第三个实体(即 TaggedPost
)不会为我们增加任何值(value)。
我们的实体看起来像这样:
@Entity
@Table(name = "Tag")
public class Tag {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name="PostTag",
joinColumns=@JoinColumn(name="TagId"),
inverseJoinColumns=@JoinColumn(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",
joinColumns=@JoinColumn(name="PostId"),
inverseJoinColumns=@JoinColumn(name="TagId")
)
@ForeignKey(name="FK_Post_Tag", inverseName="FK_Tag_Post")
@Sort(comparator=CompareTagByName.class, type=SortType.COMPARATOR)
private SortedSet<Tag> tags;
/* ... */
}
优点是我们不需要手动维护连接。我们只需添加或删除 Tag
来自每个 Post
根据需要。
另请注意:
- 延迟获取
Tag.posts
是个好主意...否则你可能会导致 Hibernate 不必要地加载数千个Post
每次显示标签时都会记录。 - 通过提供
Comparator
,多对多连接可以轻松按字母顺序对标签进行排序。与@Sort
注释
关于java - 在 Spring 中替换类别的标签系统 - Hibernate java 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399207/