我有运行Spring的数据休息通过REST API来揭露一些实体,像这样的(简化,减去塞特斯/吸气剂)一个简单的项目:定制春数据休息@ManyToMany关系处理
@Entity
public class Group {
@Id
@GeneratedValue
private int id;
...
}
@Entity
public class Person{
@Id
@GeneratedValue
private int id;
...
}
现在,显然每个小组都可以有成员,这可以通过@ManyToMany
很容易解决。不幸的是(或者典型的?)一个组成员包含更多的信息,而不仅仅是“成员”。例如,它还应该包含“是管理员”或“是隐藏成员”的信息。
这自然会导致额外的实体...
@Entity
public class GroupMember {
@OneToOne(optional = false)
@JoinColumn(updatable = false)
private Person member;
@OneToOne(optional = false)
@JoinColumn(updatable = false)
private Group group;
private boolean admin;
private boolean hidden;
...
}
这不会是坏的,但不幸的是导致了问题...我不能再简单地通过POST
ING成员添加到组一个text/uri-list
(例如)/groups/1/members
,但我不得不创建一个新的GroupMember实体,发布到/groupMembers/
,这是imho,不再舒服,并打破了组REST'树'的凝聚力。
我该如何解决这个问题,并允许一个简单的POST创建一个(基本)GroupMember,默认值?当然,我可以在那里放置一个新的@RepositoryRestController,它可以捕获任何POST请求到/groups/1/members
,但是这会阻止text/uri-list列表(因为它似乎不支持)。我可以定义一个新的对象,例如用一个人员ID,但这会打破流程,简单地发布链接列表会更好。
另一种方法是找到一种方法来映射Hibernate的@ManyToMany本身没有额外的实体......但是我不知道这样的方式......
弹簧数据剩下的应该有一个选项,允许您指定连接表的对象,但随后乐只要您指定每个连接表的附加列减少的方式,uri结构就会减少。 – kenny