坚持双向关系的嵌套实体(一对多)。

我正在创建一个Spring Boot Web应用程序,该应用程序应该通过HTTP接收JSON文档,将其解析为相应的实体类,并将对象持久化。JSON 是一个 配方 例如,一个配方可以有多个 步骤 对象相关联。

Recipe.java

@Entity
public class Recipe {

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    private String name;

    @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL)
    private Set<Step> steps;

    // Additional attributes, constructors, getters and setters omitted
}

Step.java

@Entity
public class Step {

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    private String name;

    @ManyToOne
    @JoinColumn(name = "RECIPE_ID")
    private Recipe recipe;

    // Additional attributes, constructors, getters and setters omitted
}

然而,当向应用程序发送以下JSON文档时,引用的外键为 RECIPE_ID 在步骤对象中,是 null因此,配方和它的步骤之间没有联系。

{
    "name": "Test recipe",
    "description": "Test description",
    "type": "Test",
    "cookingTime": 45,
    "preparationTime": 30,
    "thumbnail": "",
    "steps": [
        {
            "number": 1,
            "name": "First step",
            "content": "Test content",
            "image": ""
        },
        {
            "number": 2,
            "name": "Second step",
            "content": "Test content",
            "image": ""
        }
    ]
}

嵌套的步骤对象是不是也应该得到持久化,因为 CascadeType.ALL 已指定?另外,我使用的是 RestController 来处理该请求,以及一个 JpaRepository 类的持久化。

解决方案:

你可以在@ManyToOne端添加@JsonBackReference注解,在@OneToMany端添加@JsonManagedReference注解。

@Entity
public class Recipe {

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    private String name;

    @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL)
    @JsonManagedReference("recipe_steps")
    private Set<Step> steps;

    // Additional attributes, constructors, getters and setters omitted
}


@Entity
public class Step {

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    private String name;

    @ManyToOne
    @JoinColumn(name = "RECIPE_ID")
    @JsonBackReference("recipe_steps")
    private Recipe recipe;

    // Additional attributes, constructors, getters and setters omitted
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

当右键被禁用时,如何在chrome中检查webview中的元素?

2022-9-8 5:52:42

未分类

使用matplotlib.pylot.imshow()从对象的类(如1-SHIRTS, 2-SHOES等)中获取相应图像的代码。

2022-9-8 5:52:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索