gpt4 book ai didi

java - 正确保存 JSON 对象

转载 作者:行者123 更新时间:2023-12-01 11:54:33 26 4
gpt4 key购买 nike

我有以下类(class):

public class Entity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long Id;
private String name;

@JsonManagedReference
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Category category;

//Constructors, getters and setters
}


public class Category {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long Id;
private String name;

@JsonBackReference
@OneToMany(mappedBy = "category", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Entity> entity;

//Constructors, getters and setters
}

我有一个表单,当我提交表单时,我得到以下 JSON:

{
id: "1"
name: "EntityA"
category: {
id: "4"
name: "categoryA"
}
}

CategoryA 已在数据库中。当我将 EntityA 对象(主对象)持久化到数据库时,两个对象都将被持久化。

有什么问题吗?

问题是类别将再次使用相同的信息但具有不同的 id 进行持久化。因此,当我持久化上述对象 EntityA 时,它会很好地持久化在数据库中,但类别会再次以不同的 id 持久化,即使它存在于数据库中。

这是从数据库角度来看的步骤。

初始数据库:

实体表(空)

|id | name | category_id |
--------------------------
| | | |

类别表

| id | name    |
----------------
| 4 |categoryA|

Entity_category 表(空)

| entity_id | category_id |
---------------------------
| | |

坚持之后

实体表(空)

id | name  | category_id |
--------------------------
1 |EntityA| 5 |

Entity_category 表(不应该为空,但却是空的)

| entity_id | category_id |
---------------------------
| | |

类别表

id | name    |
--------------
4 |categoryA|
5 |categoryA|

我想要的只是当我持久化 EntityA 的对象时,它不会持久化类别,而是更新它与 EntityA 的关系。持久化后,第二个 View 的category_id应该是4而不是5。

我使用实体管理器的 persist() 方法来持久化对象。

我使用的技术是 jackson 2.0、Hibernate、Postgres 作为数据库。

我还测试了@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")在这两个类上方都添加了注释,但没有帮助。

我在这里做错了什么?如有任何帮助,我们将不胜感激。

最佳答案

您尚未将 Id 标记为主键 (@Id) 到您的实体中。在您的情况下, id 似乎是一个自动递增列(这就是 id 与您插入的内容不同的原因),并且 JPA 无法检测到该对象是同一个对象。尝试使用注释 @Id @GenerateValue 标记 ID 字段,然后重试。

关于java - 正确保存 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com