java - Spring 持久失败,带有 FK 的 JSON,FK null

标签 java json spring one-to-many many-to-one

我有 2 个实体:PurchaseRequest (PR) 和 PurchasingRequestLineItem (PRLI)。他们遵循典型的关系模式,即 PR 有许多 PRLI。我在 PRLI 上用 @OneToMany 注释了 PR,并在 PRLI 上用 @ManyToOne 注释了 PRLI。我可以很好地插入 PR,但如果我尝试自行插入 PRLI,并引用 PR,我会不断收到错误“列 'PurchaseRequestID' 不能为空”。下面是我的代码。我发现,如果删除 PRLI buyRequest 变量中的 @JsonIgnore 注释,插入将起作用,但 getAll 由于无限递归而失败。我该如何解决这个问题?

JSON(是的,这些 ID 有效):

{
    "PurchaseRequest": {
        "Id":658
    },
    "ProductID": 2,
    "Quantity": 1
}

PurchaseRequest.java:

@Entity
@Table(name="purchaserequest")
public class PurchaseRequest implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @ManyToOne
    @JoinColumn(name="UserID") 
    private User user;
    ....
    @OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
    @JoinColumn(name="purchaserequestid")
    private List<PurchaseRequestLineItem> lineItems;

PurchaseRequestLineItem.java

@Entity
@Table(name="purchaserequestlineitem")
public class PurchaseRequestLineItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @ManyToOne
    @JoinColumn(name="PurchaseRequestID")
    @JsonIgnore
    private PurchaseRequest purchaseRequest;
    private int productID;
    private int quantity;

最佳答案

您可以使用两个注解来解决无限递归问题,而无需使用 @JsonIgnore : --@JsonManagedReference

--@JsonBackReference

@JsonManagedReference 私有(private)列表行项目;

@JsonBackReference 私有(private)购买请求购买请求;

关于java - Spring 持久失败,带有 FK 的 JSON,FK null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47828739/

相关文章:

java - 如何加快Docker容器启动时间?

java - 在 Eclipse Neon 上运行 Apache UIMA Ruta Workbench 2.5.0 时出错

json - 使用 alamofire + swift 获取动态加载的 html

java - Spring Boot 无法识别带有发送请求参数的 Controller

java - 访问 Spring Session 范围的代理 Bean

java - 如何使用 Java 在 OpenCV 3.0.0 中使用 BackgroundSubtractorMOG?

java - 父类中的子实例

python - 在 python 中轮询 api 以获取特定的 json 元素

C#:如何在一个文件中读取 'éóú' 和 öäü 等字符?

java - Spring Bean @Autowired 和@Qauilifier 名称在我的情况下不起作用。任何人都可以帮助我提供确切的工作示例