gpt4 book ai didi

java - spring boot 一对一映射单向

转载 作者:行者123 更新时间:2023-12-01 16:17:35 26 4
gpt4 key购买 nike

我对如何设置两个实体之间的关系感到困惑。我有一个名为设备的实体,它存储所有设备配置文件。这与一切无关。

我有另一个名为 Analytics 的实体,它应该包含设备。请注意,设备不依赖于分析。许多分析可以包含相同的设备。也就是说,如果用户删除分析,实际设备不会发生任何事情。我想做的是,当创建一个分析对象时,我想存储它引用的设备。

我的设备.java


@Entity
@Table(name = "km_equipment")
public class Equipment {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name", unique = true)
@NotNull
private String name;
private String model;

我的 Analytics.java

@Entity
@Table(name = "km_roi")
public class ROIAnalysis {


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "name", unique = true)
@NotNull
private String name;
private String description;

@OneToOne()
@JoinColumn(name="id", referencedColumnName = "id", insertable = false, updatable = false)
Equipment equip;

我无法正确保存此关系。我究竟做错了什么?我相信它仍然是一对一的关系,因为一个分析对象只能包含一个设备对象。

这是 Controller POST API

@RequestMapping(value = ControllerConstants.ADD_ROI, method = RequestMethod.POST)
public ResponseEntity<?> addROI(@RequestBody ROIAnalysis roi) {
...
...
roiDao.save(roi);
...

我进行了一次调用,其中我的 JSON 负载位于

{
description: "132"
equipment: {id: 5, name: "June 8 equip roi", model: "tst"}
name: "123"
}

我没有看到任何错误。在数据库中,我在分析表中没有看到任何设备列。我期望设备的 ID 可能会存储在分析表中,因为当我尝试获取分析时,我也需要设备的信息

最佳答案

您将关系定义为 @JoinColumn(name="id", referencedColumnName = "id", insertable = false, updatable = false) 您为何将其定义为 insertable=false ,可更新=假?如果您这样做;对关系所做的任何修改都不会被hibernate反射(reflect)到数据库中。请删除 insertable = false, updatable = false 部分,以便将关系更新反射(reflect)到数据库。

另一件事需要修复是@JoinColumn(name="id",referencedColumnName = "id")。这很奇怪;连接列应该类似于 equipment_id!

还有一件事是您需要创建一个新的 ROIAnalysis 实体,并找到该新实体的设备字段并将其设置为 id 为 5 的设备实体;您可以从数据库中获取并根据您提供的示例进行设置。

关于java - spring boot 一对一映射单向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62363447/

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