首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java-EE-6:如何在@ManyToMany和@ManyToOne关系中存储布尔值?

Java-EE-6:如何在@ManyToMany和@ManyToOne关系中存储布尔值?
EN

Stack Overflow用户
提问于 2013-02-27 01:40:35
回答 2查看 393关注 0票数 0

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

您如何对这样的场景进行建模?有没有办法将布尔/标志附加到用户和文档之间的关系?

这是我的简化模型:

代码语言:javascript
复制
@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 ...

}

下面是document类:

代码语言:javascript
复制
@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 ...

}

非常感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 02:19:24

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

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

您可以将my answer on the other question视为创建@Entity类的起点。在答案中描述了来自连接表的实体,以及它的主键。

票数 1
EN

Stack Overflow用户

发布于 2013-02-27 01:44:07

Inbox连接表中添加一个新列来存储“看不见的”布尔值。然后是map the join table as new entity, and decompose the many-to-many association into two OneToMany associations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15095675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档