当前位置: 首页 > 知识库问答 >
问题:

JPA和Hibernate dosnt在spring rest中首次使用JSON更新一对多关系

苍嘉澍
2023-03-14

我尝试使用hibernate、JPA和JSON进行spring rest。我必须使用以下实体:

university.java

@Entity()
@Table(name = "university")
public class University extends BaseEntity {
    private String uniName;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @JoinColumn(name = "university_id", foreignKey = @ForeignKey(name = "university_id"))
    private Collection<Student> students;

    //setters and getters
}
@Entity
@Table(name = "student")
public class Student extends BaseEntity {
    private String stuName;

    @ManyToOne(fetch = FetchType.EAGER)
    @JsonIgnoreProperties("students")
    private University university;

    //setters and getters
}
[
  {
    "id": 1,
    "uniName": "uni1",
    "students": [
      {
        "id": 1,
        "stutName": "st1",
        "university": {
          "id": 1,
          "uniName": "uni1"
        }
      },
      {
        "id": 2,
        "stutName": "st2",
        "university": {
          "id": 1,
          "uniName": "uni1"
        }
      }
    ]
  }
]
Hibernate:
    select
        university0_.id as id1_5_1_,
        university0_.uniName as uniName2_5_1_,
        students1_.university_id as universi3_4_3_,
        students1_.id as id1_4_3_,
        students1_.id as id1_4_0_,
        students1_.stuName as stuName2_4_0_,
        students1_.university_id as universi3_4_0_
    from
        university university0_
    left outer join
        student students1_
            on university0_.id=students1_.university_id
    where
        university0_.id=?
Hibernate:
    update
        student
    set
        stuName=?,
        university_id=?
    where
        id=?
Hibernate:
    update
        university
    set
        uniName=?
    where
        id=?
Hibernate:
    update
        student
    set
        stuName=?,
        university_id=?
    where
        id=?
Hibernate:
    select
        university0_.id as id1_5_1_,
        university0_.uniName as uniName2_5_1_,
        students1_.university_id as universi3_4_3_,
        students1_.id as id1_4_3_,
        students1_.id as id1_4_0_,
        students1_.stuName as stuName2_4_0_,
        students1_.university_id as universi3_4_0_
    from
        university university0_
    left outer join
        student students1_
            on university0_.id=students1_.university_id
    where
        university0_.id=?
Hibernate:
    select
        student0_.id as id1_4_0_,
        student0_.stuName as stuName2_4_0_,
        student0_.university_id as universi3_4_0_
    from
        student student0_
    where
        student0_.id=?
Hibernate:
    select
        student0_.id as id1_4_0_,
        student0_.stuName as stuName2_4_0_,
        student0_.university_id as universi3_4_0_
    from
        student student0_
    where
        student0_.id=?
Hibernate:
    update
        student
    set
        university_id=?
    where
        id=?
Hibernate:
    update
        student
    set
        university_id=?
    where
        id=?

更新:这是我的编辑服务。

@Override
@Transactional/*(propagation = Propagation.NESTED)*/
public T edit(T entity) throws Exception {
    return entityManager.merge(entity);
}

感谢任何帮助和建议。

共有1个答案

周和歌
2023-03-14

尝试更新您的实体,如下所示

@Entity
@Table(name = "university")
public class University extends BaseEntity {

    private String uniName;

    @OneToMany(mappedBy = "university", ...) // Check the mappedBy property
    private Collection<Student> students;

    //setters and getters

}

@Entity
@Table(name = "student")
public class Student extends BaseEntity {

    private String stuName;

    @ManyToOne(fetch = FetchType.EAGER)
    @JsonIgnoreProperties("students")
    private University university; // university is bidirectionally mapped to Student 

    //setters and getters
}
 类似资料:
  • 问题内容: 我想更新表的所有字段的值为“ PCNAME”。我要更新的表名是XYZ。我只想更新一些字段而不保留一些不变。 这会影响很多行而不是一行,因为会有很多行带有NAME =’PCNAME’。我如何使用JPA做到这一点。我有与此表关联的实体类。 问题答案: 您既可以采用面向对象的方式,也可以使用更新查询。 面向对象: 使用更新查询(未试用): 显然,第二个版本的性能更好。

  • 您好,我想平稳地更新seekbar,每秒钟更新一次,所以我创建了一个使用计时器的方法,每秒钟更新seekbar,但它每秒钟都在更新歌曲,我到处搜索,但没有找到解决方案,我不想使用任何处理程序,我想用这个方法修复 在这里我实现了歌曲开始时的方法 这是我的全部代码

  • 我的问题可能看起来很傻。我是JPA的新手,试图理解它的基本概念。我发现有一种@multi-to-one实体关系可以在那里使用。我的问题是,为什么有人想在拥有“一对多”关系的同时使用它?我的意思是,拥有后一个就足够了解关系并发送查询了,对吗?如果没有,请解释。也许我对这两种关系的看法是完全错误的。请提供一个场景作为示例,以便我更好地理解。谢谢

  • 我正在尝试用杜松子酒和戈尔姆酒制作API。现在我已经插入了一个API。这个API将在数据库中创建多个条目。我有这样的json体。数组的大小会有所不同。 这样,我就有了从url获取的其他参数- 现在我想在DB上创建多个条目[1,2],其中包含key1和key2的数据,如- 我陷入了困境,不知道如何阅读这个json并将数据保存在我的模式(struct)中,以创建多个条目,如- 请引导我找到一个可能的解

  • 我正在尝试使用Hibernate/Jpa建立一对多关系。 当前我遇到以下异常: 退款交易。java这是父类 ItemRefundDetail.java这是子类。 我知道我在@OneToMany或@manytone注释中犯了一些错误。 更新:我在db、refund_transaction和item_refund_detail中只有2个表。我没有任何名为refund_transaction_item_

  • 问题内容: 我下面有两个… 我想更新的,有时也用下面的方法有时… 方法#1 方法#2 第一种方法可以正常工作,但第二种则不能。但是,当我将“ 从” 移至“ 第二”方法时,效果很好,而不是第一个。 问题答案: 问题是一个问题。 假设它是的子类,那么您的问题是关系中只有一方是拥有实体。将使得实体所属的实体,因此仅改变该实体被持久化。这意味着,你必须更新在这两种情况下的实体。如果您有一个“ a”的组列表