热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java–自定义SpringDataRest@ManyToMany关系处理

我有一个运行Spring-Data-Rest的简单项目,通过RestAPI公开一些实体,比如这个(简化,减去SettersGetters):@EntitypublicclassGr

我有一个运行Spring-Data-Rest的简单项目,通过Rest API公开一些实体,比如这个(简化,减去Setters / Getters):

@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;
...
}

哪个不会那么糟糕,但遗憾的是会导致问题…我不能再简单地通过将文本/ uri-list发布到(例如)/ groups / 1 / member来将成员添加到组中,但我必须而是通过发布到/ groupMembers /来创建一个新的GroupMember实体,这是imho,不再那么舒服,并打破了群组REST“树”的凝聚力.

如何解决这个问题并允许简单的POST创建一个(基本的)GroupMember,默认值为?当然我可以在那里放一个新的@RepositoryRestController来捕获/ groups / 1 / members的任何POST请求,但这会阻止text / uri-list列表(因为它似乎不支持).我可以定义一个新对象,例如使用人员ID,但这会破坏流程,简单发布链接列表会更好.

另一种方法是找到一种方法来映射Hibernate @ManyToMany本身而不需要额外的实体……但我不知道这样的方式……

解决方法:

如果您正在处理spring数据休息并希望在自定义控制器中处理text / uri-list,则可以使用类型为Resources的参数传递值,如下所示:

@RequestBody Resources incoming

你通过调用incoming.getLinks()获得uris

您可以将spring数据rest控件作为参考 – org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController#createPropertyReference


推荐阅读
author-avatar
手机用户2502858307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有