Java JPA序列化/反序列化嵌套的自动生成字段
Spring boot中有这样一个项目: 模型页: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
@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;