java - 一对多关系支持读取但不支持插入

标签 java hibernate spring-boot spring-data-jpa spring-rest

我正在使用 Spring Boot(版本 2.1.1)创建一个应用程序,该应用程序需要在两个模型类之间建立一对多和多对一的关系,并具有以下要求

模型类是

@Entity
@Table(name="ORGANIZATIONS")
public class Organization{

    @Id
    @GeneratedValue
    Private long id;

    @Column(unique=true)
    Private String name;
}

@Entity
@Table(name="DEPARTMENTS")
Public class Department{

   @Id
   @GeneratedValue
   Private long id;

   @Column(unique=true)
   Private String name;


//…

}

要求

  1. 组织和部门都应通过各自单独的 REST API 创建。
    • 通过 POST/organizations api,我们应该能够创建一个组织,而无需在同一 api 调用中创建部门。事实上,API 应该会失败我尝试将部门的 json 元素作为 POST/organizations 调用的一部分传递。
    • 调用 POST/departments 时,我应该能够传递组织 ID,将新创建的部门与组织关联起来。
  2. GET/organizations API 调用应返回集合作为组织对象的一部分

问题是

  1. 如何关联两个模型对象?我是否在组织中添加@OneToMany?我应将哪些属性传递给@OneToMany?我是否需要在另一边部门有一个类似的@ManyToOne?

  2. 我需要对 REST Controller 进行任何特殊考虑吗?

最佳答案

您仅需要 @ManyToOne 才能在 Department 中保留,但您很可能需要 @OneToManyOrganization 中> 用于 GET 请求。

只需确保在保存部门时您需要:

  • 从数据库获取组织
  • 在部门对象上设置提取的组织
  • 将部门添加到 Organization.departments 列表
  • 坚持部门

对于错误处理,返回 BAD_REQUEST 响应:

return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

关于java - 一对多关系支持读取但不支持插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54309296/

相关文章:

java - 使用Hibernate按主键和分区键级联删除

hibernate - 删除重复记录时分页结果错误

java - Spring Boot 中的 Junit Test 不注入(inject)服务

java - 根据消息类型选择消息实现

java - 使用 Java 在 WebDriver 中通过 Ctrl+F5 刷新浏览器

java - j2me中如何设置组件方向从右到左?

java - 如何更改 eclipse RCP 应用程序中首选项页面的标题?

java - 部署时 PermGen 错误 Tomcat8/Spring Data/Hibernate

java - Mockito org.mockito.exceptions.misusing.InvalidUseOfMatchersException : Invalid use of argument matchers! 预期 0 个匹配器,记录 1 个:

java - 我很困惑。插入排序(基本排序,我知道)算法正在做一些我无法解释的事情