我正在研究一个基本上由用户和文档组成的数据模型。现在,每次添加一个新文档时,都应该有一个标志来标识文档是“看不见的”,只要特定用户没有看过它(例如,点击了它)。
您如何对这样的场景进行建模?有没有办法将布尔/标志附加到用户和文档之间的关系?
这是我的简化模型:
@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类:
@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 ...
}非常感谢您的帮助!
发布于 2013-02-27 02:19:24
在JB Nizet的回答中,Matt提到的连接表有一个唯一的主键(id),两个外键上有一个唯一的约束,还有一个附加的列。这是一个很好的方法。
但是,当您使用@ManyToMany时,很可能在连接表中有一个由两个外键组成的主键。如果您想继续使用该模式并添加额外的viewed列,则很可能需要习惯使用@Embeddable类来使组合主键反映在@Entity中。请记住,当您这样做时,您将需要覆盖equals/hashcode。
您可以将my answer on the other question视为创建@Entity类的起点。在答案中描述了来自连接表的实体,以及它的主键。
发布于 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。
https://stackoverflow.com/questions/15095675
复制相似问题