【发布时间】:2020-04-27 13:04:34
【问题描述】:
我有下一个 JSON:
{
"name": "String",
"time": int,
"serve": int,
"type": "String",
"about": "String",
"userId": int,
"food": [{
"main_id": long
"name_Id": int,
"size": int,
"measure": "String",
"foodImgId": int
},
{
"main_id": long
"name_Id": int,
"size": int,
"measure": "String",
"foodImgId": int
}, ... ],
"steps": [{
"main_id": long
"step_id": int,
"step": "String",
"stepImgId": int
},
{
"main_id": long
"step_id": int,
"step": "String",
"img": int
}, ... ],
"img": [{
"main_id": long
"foodImgId": int,
"stepImgId": int,
"imgLink": "String"
},
{
"main_id": long
"foodImgId": int,
"stepImgId": int,
"imgLink": "String"
}, ... ],
}
以及此 JSON 的下一个模型:
@Entity
@Table(name = "MAIN")
public class Main implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "TIME", nullable = false)
private int time;
@Column(name = "SERVE", nullable = false)
private int serve;
@Column(name = "TYPE", nullable = false)
private String type;
@Column(name = "ABOUT", nullable = false)
private String about;
@Column(name = "USER_ID", nullable = false)
private int userId;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "main_id", orphanRemoval = true)
private Set<Food> food;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "main_id", orphanRemoval = true)
private Set<Steps> steps;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "main_id", orphanRemoval = true)
private Set<Image> img;
// setter & getter
}
@Entity
@Table(name = "STEPS")
public class Steps implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "MAIN_ID", updatable = false)
public Main main_id;
@Column(name = "STEP_ID", nullable = false)
public int step_id;
@Column(name = "STEP", nullable = false)
public String step;
@OneToOne(optional = false)
@JoinColumn(name = "stepImgId", nullable = true)
public Image stepImgId;
// setter & getter
}
@Entity
@Table(name = "IMAGE")
public class Image implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "MAIN_ID", nullable = false)
private Main main_id;
@OneToOne(optional = false, mappedBy="foodImgId")
@Column(name = "foodImgId", nullable = true)
private Food food;
@OneToOne(optional = false, mappedBy="cookStepId")
@Column(name = "stepImgId", nullable = true)
private CookStep cookStepId;
@Column(name = "ImgLink", nullable = false)
private String imgLink;
// setter & getter
}
@Entity
@Table(name = "FOOD")
public class Food implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "MAIN_ID", nullable = false)
private Main main_idain_;
@Column(name = "NAME_ID", nullable = false)
private int nameId;
@Column(name = "SIZE", nullable = false)
private int size;
@Column(name = "MEASURE", nullable = false)
private String measure;
@Column(name = "foodImgId", nullable = true)
private int foodImgId;
// setter & getter
}
我的问题。如何将该 JSON 保存到数据库? Main_id,在每个模型中,必须有来自 Main 类的 id。
我有一个空的存储库,因为我尝试使用默认方法 repo.save(My_JSON) 保存数据,但我无法从主类接收 id。我需要任何想法,因为我没有足够的 spring-boot 经验。
【问题讨论】:
-
食物和步骤中的“主要”类型是否有输入错误?这似乎是“食谱”类。除此之外,要解决的主要问题是您的数据不是树,因为 Image 类复制了现有的 Food 和 Step 对象(对于那些想要直接阅读的人)
-
Pdem,当我尝试通过 JPA 保存该 JSON 时,我收到错误什么 main_id 在内部结构(食物、步骤或图像)中为空。我如何使用 JPA 将数据保存到 SQL DB。 PS:是的,我在写问题时犯了一些错误。现在,我修复它。
标签: java json spring one-to-many many-to-one