Java JPA序列化/反序列化嵌套的自动生成字段

Java JPA序列化/反序列化嵌套的自动生成字段,java,spring-boot,jpa,repository,Java,Spring Boot,Jpa,Repository,Spring boot中有这样一个项目: 模型页: @Entity @Table(name = "pages") @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class Page implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDEN

Spring boot中有这样一个项目:

模型页:

@Entity
@Table(name = "pages")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Page implements Serializable{

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

    @Column(name = "color")
    private String color;

    @OneToMany(mappedBy = "page", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Note> note;

    // constructor, getters and setters

控制器:

   public ResponseEntity<Object> createPage(@RequestBody Page page) {
       pageRepository.saveAndFlush(page);
       return new ResponseEntity("OK", HttpStatus.OK);
   }
对数据库进行了新记录,正确生成了页面id和注释id,但字段notes.page_id仍为空

表页:

表注:


问题是:如何为notes.page\u id提供自动生成的pages表id?

JPA实体的原理实际上非常简单

JPA实体中有一个字段,该字段映射到数据库表中的一列

此字段包含的内容将写入表中相应的数据库列

Node.page字段是映射到note.page\u id列的字段。 并且该字段的值为空。因此,写入数据库列的内容为null

如果您想在列中有一个页面ID,那么您需要在该字段中有一个非空页面。因此,您的代码需要执行以下操作

page.getNotes().forEach(note -> note.setPage(page))

就这么简单且合乎逻辑。

按如下所示修改注释类代码

@ManyToOne
@JoinColumn(name="page_id", nullable=false)
private Page page;

添加PageRepository的代码。另外,您是否尝试过让便笺@embedded?
id|color  |
1 |yellow |

id| content        |title |page_id|
1 | Java is awesome|Java  | null  |
2 | Python is good |Python| null  |
page.getNotes().forEach(note -> note.setPage(page))
@ManyToOne
@JoinColumn(name="page_id", nullable=false)
private Page page;