spring data JPA null主键错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring data JPA null主键错误相关的知识,希望对你有一定的参考价值。

这是我的数据实体

@Entity
@Table(name = "hotel")
@Data
public class Hotel  {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "hotel_id", updatable = false)
    @JsonIgnore
    private int id;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "room_price")
    private RoomPrice roomPrice;
}

@Entity
@Table(name = "room_price")
@Data
public class RoomPrice {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "room_price_id", updatable = false)
    @JsonIgnore
    private int roomPriceId;

    @Column(name = "price")
    @Min(0)
    private double price;

    @Column(name = "currency_type")
    @NotEmpty
    @Size(min = 3, max = 3)
    private String currency;
}

SQL:

CREATE TABLE IF NOT EXISTS room_price (
  room_price_id INTEGER PRIMARY KEY,
  price         SMALLINT,
  currency_type VARCHAR(3) NOT NULL
);
ALTER TABLE hotel
  ADD
  COLUMN room_price INTEGER REFERENCES room_price (room_price_id);

hotel.setRoomPrice(price); hotelDao.save(hotel); throw room_price_id null value error message。使用cascade.all,在存储酒店实体时,它还应该存储价格实体。我做错了什么?谢谢。

答案

由于你正在使用GenerationType.IDENTITY策略,你应该使用serialbigserial类型为room_price_id让Postgres自动生成你的主键。

以上是关于spring data JPA null主键错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使每个表中的主键值应从数字一(1)开始 - PostgreSQL,Spring data jpa

Spring Data JPA - 带有“@Param Date”的自定义@Query 不起作用

有没有办法在输出中获得可重复的主键并在 spring data jpa 中保持分页?

Spring data jpa删除元素时必须先查询出来吗

Spring Data JPA + Postgres - 无法使用一对一映射插入数据

Spring-Data-JPA 爬坑记