java - spring boot 一对一映射单向

标签 java spring spring-boot hibernate jpa

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

我有另一个名为 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/

相关文章:

java - Maven 上最新版本的 MapReduce 库

spring - 如何以编程方式创建触发器对象?

spring-boot - 带有 Spring Boot 的简单嵌入式 Kafka 测试示例

java - 使用连接字符串通过 Spring Boot 连接到 Azure EventHub(类似 Kafka)

java - 在本地创建 spring 和 nodejs 应用程序之间的 SSL 连接

java - 加入表格 hibernate +分组依据

java - Janino动态编译接口(interface)类

java - Java 中的私有(private)辅助方法与公共(public)静态实用程序方法

java - 来自 ejb.jar 问题的 Glassfish 3.1.2 lib/jar 引用

java - Spring WS 调用 .net Web 服务