首页 > 解决方案 > JPA 一对一加入 @Id 列。参考表中未更新的连接列

问题描述

我有两张表 Car 和 Status。关系是一对一的 Car has-a Status

 Car Table
 Id (PK)
 Name
 status_id(FK)

Status Table
Id(PK)
status_code

关系是car.status_id=status.id

实体

@Entity
class Car{
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Id
  Long id;
  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumn(name = "status_id", referencedColumnName = "id", insertable =  false, updatable = false)
  Status status
 
 @Column(name="status_id")
  Integer statusId
  ..
}

@Entity
class Status{
   @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Id
  private Long id;
  private int status_code;

}

当我保存汽车对象时:

Car{ id=null, name="my car", status_id=null, status={id=null, status_code=123}}

repo.saveAndFlush(car)

保存在表中的数据是:

Car
|Id|name|status_id|
|1|mycar|null     | <------THIS NULL IS MY ISSUE

(这应该使用插入状态表中的 id 进行更新。如何实现?

Status
|id|status_code|
|1 |123        |

标签: postgresqljoinspring-data-jpa

解决方案


无需单独定义 statusId 字段。只需删除以下几行,它就会按预期工作。

 @Column(name="status_id")
  Integer statusId

推荐阅读