【发布时间】:2017-08-30 04:39:28
【问题描述】:
我有 2 个实体“用户”和“组”。实际上这是一个多对多关联,但我想在关系表中保留其他信息,例如 created 或 userid。
所以我发现我必须引入一个表示关系表“UserGroup”的新实体。
表格:
用户 ID、姓名、密码
组 ID、名称
用户组 id、userid、groupid、created、createduserid
实体:
@Entity
@Table(name="user")
public class User {
@OneToMany(mappedBy="user")
List<UserGroup> groups;
}
@Entity
@Table(name="group")
public class Group {
@OneToMany(mappedBy="group")
List<UserGroup> users;
}
@Entity
@Table(name="usergroup")
public class UserGroup {
@ManyToOne
User user;
@ManyToOne
User group;
@Column(name="created")
Date created;
// ...
}
现在由于领域驱动设计,我不得不介绍 在我的用户实体方法中,例如:User::addGroup(group)、User::removeFromGroup(group)。 但从技术上讲,这似乎是不可能的,因为我需要创建 一个 UserGroup 实体,注入 User 和 Group 对象,最后持久化 使用 EntityManager。
是否有更优雅的解决方案,或者我真的必须在服务对象中的实体之外执行此操作?
(使用 ManyToMany 我可以在实体中执行此操作。)
【问题讨论】:
-
正如康斯坦丁所指出的,在这里您没有解释域,也没有拆分聚合根。在考虑“表格”之前,您需要充分了解您正在建模的领域。无论如何,您可以简单地通过创建一个嵌入式集合来实现您的要求,其中您拥有使用“userId、groupId created、useridCreated”构建的实体(以 ORM 术语)。看这里:java2s.com/Tutorials/Java/JPA/…, en.m.wikibooks.org/wiki/Java_Persistence/ElementCollection
标签: java hibernate domain-driven-design