0

在某些实体之间具有 am:n 真实世界的关系,例如用户 <---> 组 现在我想对这种关系进行建模并基于它存储附加信息,例如字段“质量”。

听说要新建一个联接表 user_group 如下:

id | user_ref | group_ref | quality
----------------------------------
1      1           1         0.5
2      1           2         1.3
...    ...         ...        ...

对应的实体有两个相关的实体(私有成员)用户和组,使用@ManyToOne注释进行注释。另一方面,我的用户和我的组都有一组相关的 user_group-entities,它们都是私有成员,并使用@OneToMany -annotation 声明。

我有三个问题:

  1. 这是对 JPA 2.0 中附加字段问题进行建模的正确方法吗?
  2. 我不允许同时使用 user_group 中的用户和组作为主键,因为它们不是有效的主键类型。是否真的有必要声明一个新的主节点。
  3. 这是这些连接表/实体的常见工作流程吗?

...

EntityManager em = ...
...
em.getTransaction().begin();
User u = new User("Pete");
Group g = new Group("Anonymous workaholics")
UserGroup ug = new UserGroup();
ug.addUser(u);
ug.addGroup(g);

em.persist(u); em.persist(g); em.persist(ug);
em.getTransaction().commit();
em.close()

非常感谢!

4

1 回答 1

1
  1. 是的,这是做到这一点的好方法。
  2. 可以有一个由两个 ManyToOne 关联组成的复合主键,但是在映射和应用程序的其余部分中处理它要复杂得多,而且效率也较低。您有一个实体,因此只需对所有其他实体执行类似操作并使用自动生成的单列主键。这个实体曾经是多对多关联的连接表这一事实是无关紧要的。
  3. 是的,这看起来没问题,除了addUser()andaddGroup()方法应该被命名为setUser()and setGroup():对于给定的 ,只有一个用户和一个组UserGroup。我也会为实体本身使用另一个名称。例如“会员”之类的东西。
于 2013-04-30T11:59:32.763 回答