当前位置: 首页 > 知识库问答 >
问题:

一对多映射关系不能正确保存数据

费星晖
2023-03-14

{
    "nameReport": "Title of the report",
    "chapters": [
        {
            "titleChap": "Title of the chapter",
            "descChap": "The description of the chapter"
        },
            "titleChap": "2nd Title of the chapter",
            "descChap": "2nd description of the chapter"
        }
    ]
}

一个udit.java

@Entity
@Table(name="audits")

public class Audit {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id", nullable = false, unique = true)
  private Integer id;

  @Column(name = "report_name")
  private String nameReport;

  @OneToMany(fetch = FetchType.LAZY, mappedBy="audit", cascade = CascadeType.ALL)
  private Collection<Chapter> chapters;

  public Audit() {
  }

  public Audit(String nameReport, Collection<Chapter> chapters) {
    this.chapters = new ArrayList<Chapter>();
    this.nameReport = nameReport;
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getNameReport() {
    return nameReport;
  }

  public void setNameReport(String nameReport) {
    this.nameReport = nameReport;
  }

  public Collection<Chapter> getChapters() {
    return chapters;
  }

  public void setChapters(Collection<Chapter> chapters) {
    this.chapters = chapters;
  }

Chapter.java

@Entity
@Table(name="chapitres")

@Component
public class Chapter {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
//  @GeneratedValue
  @Column(name = "id")
  private Integer id;

  @ManyToOne(fetch = FetchType.LAZY, optional = false)
//  @ManyToOne
  @JoinColumn(name = "audit_id")
  private Audit audit;

  @Column(name = "chapter_title")
  private String titleChap;

  @Column(name = "chapter_desc")
  private String descChap;

  public Chapter() {}

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public Audit getAudit() {
    return audit;
  }

  public void setAudit(Audit audit) {
    this.audit = audit;
  }

  public String getTitleChap() {
    return titleChap;
  }

  public void setTitleChap(String titleChap) {
    this.titleChap = titleChap;
  }

  public String getDescChap() {
    return descChap;
  }

  public void setDescChap(String descChap) {
    this.descChap = descChap;
  }

审计控制员。JAVA

@RestController
@RequestMapping(value = "/api")

public class AuditController {
  private AuditRepository auditRepository;

  @Autowired
  AuditController(AuditRepository auditRepository){
    this.auditRepository = auditRepository;
  }

  @PostMapping("/audits")
  public ResponseEntity<Audit> postAudit(@RequestBody Audit audit, @RequestBody Collection<Chapter> chapters) {
    try {
      Audit _audit = auditRepository.save(new Audit(audit.getNameReport(), audit.getChapters()));
      return new ResponseEntity<>(_audit, HttpStatus.CREATED);
    } catch (Exception e) {
      return new ResponseEntity<>(null, HttpStatus.EXPECTATION_FAILED);
    }
  }

  @GetMapping("/audits")
  public ResponseEntity<List<Audit>> getAllAudits() {
    List<Audit> audits = new ArrayList<>();
    try {
      auditRepository.findAll().forEach(audits::add);

      if(audits.isEmpty()) {
        return new ResponseEntity<>(audits, HttpStatus.NO_CONTENT);
      }
      return new ResponseEntity<>(audits, HttpStatus.OK);
    } catch (Exception e) {
      return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }

  @GetMapping("/audits/{id}")
  public ResponseEntity<Audit> getAuditById(@PathVariable("id") Integer id) {
    Optional<Audit> auditData =  auditRepository.findById(id);

    if (auditData.isPresent()) {
      return new ResponseEntity<>(auditData.get(), HttpStatus.OK);
    } else {
      return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
  }
}

共有2个答案

骆文彬
2023-03-14
public Audit(String nameReport, Collection<Chapter> chapters) {
    this.chapters = new ArrayList<Chapter>();
    this.nameReport = nameReport;
}

您正在创建空的章节列表。

庄智
2023-03-14

我认为这就是解决办法

public Audit(String nameReport, Collection<Chapter> chapters) {
    this.chapters = new ArrayList<Chapter>();
    this.nameReport = nameReport;
  }

您正在这里创建新的数组列表,因此在审核中不会添加章节。你应该把这个改成

 public Audit(String nameReport, Collection<Chapter> chapters) {
        this.chapters =chapters;
        this.nameReport = nameReport;
      }
 类似资料:
  • 在我的Spring Boot应用程序中,我想将用户角色多对多关系保存在数据库中相应的映射表中,但hibernate给了我一条错误消息。 我的User.java班: 我的Role.java课: 我的跑步方法: Hibernate向我提供了一条错误消息: 无法添加或更新子行:外键约束失败(。, CONSTRAINTFOREIGN KEY()REFERENCES()ON DELETE CASCADE O

  • 问题内容: 在我的elasticsearch服务器中,我只有一个索引。 (博客)索引包含多种类型。 如:,。 在标签类型中,我创建了1000多个标签,并在帖子类型中创建了10个帖子。 例如:帖子 例如:标签 我想将现有标签分配给博客帖子(即,关系=>映射)。 如何将标签分配给帖子映射? 问题答案: 您可以在Elasticsearch中使用4种方法来管理关系。在Elasticsearch博客文章-E

  • 本文向大家介绍mybatis关系映射之一对多和多对一,包括了mybatis关系映射之一对多和多对一的使用技巧和注意事项,需要的朋友参考一下 本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户。(其中应用到注释) 1.代码的结构 2. 建表语句: 3. 用户实体: 4. 订单实体: 5.写PersonMapper.java的接口 6. 一对多实体配置: Person

  • 母实体 子实体 代码持久化 请告诉我这些步骤是否正确。我有以下例外。并且无法理解为什么父id在子表中不可用 原因:org.hibernate.exception.ConstraintViolation异常:无法将值NULL插入到列PARAM_REF_ID,表PARAM中;列不允许空值。INSERT失败。

  • 如果在中只有一组,这将非常好地工作。ASSESSMENT_COMMENT只有两列: 它将完美地代表一对多的关系。 现在问题来了: 那么,1)这是Hibernate中已知的bug吗?2)有办法解决这个问题吗?我可以强制Hibernate创建两个映射表,每个映射表一个吗?请记住,我不能更改类来引用(业务逻辑需求)

  • 嗨,我有一个角色表和一个权限表,它有多对多的关系。我已经创建了下面链接中提到的实体 https://www.baeldung.com/jpa-多对多 角色实体 权限实体 我已经为每个实体创建了JPA存储库,并且正在尝试将权限保存给一个角色。我在表中已经有了一组/列表的权限,我正在尝试将它们映射到某个角色。我正在尝试使用spring JPA存储库执行下面的代码。 在执行我得到的代码时 org.hib