0

我正在研究一个基本上由用户和文档组成的数据模型。现在每次添加一个新文档时,只要特定用户没有查看它(例如单击它),就应该有一个标志将文档标识为“未见过”。

你将如何模拟这样的场景?有没有办法将布尔值/标志附加到用户和文档之间的关系?

这是我的简化模型:

@Entity
@Table(name="User")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @Column(length = 128)
    private String name;
    @ManyToMany(mappedBy = "users", fetch=FetchType.LAZY)
    private List<Document> documents = new ArrayList<Document>();

    // getters and setters ...

}

这是文档类:

@Entity
@Table(name = "Document")
public class Document {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(name = "Inbox", joinColumns = @JoinColumn(name = "document_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
    protected List<User> users = new ArrayList<User>();

    // getters and setters ...

}

非常感谢您的帮助!

4

2 回答 2

1

向您的连接表添加一个新列,以Inbox存储“未见”的布尔值。然后将连接表映射为新实体,并将多对多关联分解为两个 OneToMany 关联

于 2013-02-26T17:44:06.933 回答
1

在 JB Nizet 的回答中,Matt 提到连接表有一个唯一的主键 ( id)、一个对两个外键的唯一约束和一个附加列。这是一个很好的方法。

但是当您使用@ManyToMany时,您很可能有一个主键,它由连接表中的两个外键组成。如果您想保留该模式并添加一个额外的viewed列,您很可能需要习惯使用@Embeddable类来让复合主键反映在您的@Entity. 请记住,当您这样做时,您将需要覆盖equals/ hashcode

您可以将我对另一个问题的回答作为创建@Entity课程的起点。在答案中,描述了连接表中的实体及其主键。

于 2013-02-26T18:19:23.537 回答