java - 在 Spring 中替换类别的标签系统 - Hibernate java 项目

标签 java hibernate spring tags categories

有谁知道如何设计类似于 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/

相关文章:

java - Maven Java Surefire 无法创建测试类

java - 移动 TextView 框使我的 Android 应用程序崩溃

java - Spring-Data:具有 Java 配置的未知实体

java - 如何从外部id获取主键作为外键引用?

java - SQL批量更新保证顺序?

java - Spring 合约 : how to send a Collection of Strings as a RequestBody

spring - 使用 Spring 记录 Jedis 客户端

java - 如何在symbian中创建AES加解密程序

java - JTabbedPane 组件访问

spring - 由 : org. hibernate.HibernateException : Could not instantiate connection provider [org. connection.C3P0ConnectionProvider 引起的错误]