【问题标题】:java.sql.SQLException: 'Field 'voc_id' doesn't have a default value'. using Spring JPAjava.sql.SQLException:'字段'voc_id'没有默认值'。使用 Spring JPA
【发布时间】:2021-10-17 21:31:51
【问题描述】:

我正在尝试以一对一的关系插入 Voc、Recovery 类。
Voc 将首先插入,它的 pk 将进入 Recovery 类,因为它是外键。 (和Recovery类的PK一样使用)


这是 Voc 类,它是父类。
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="voc")
public class Voc {
    
    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int id;
    
    @OneToOne(mappedBy="voc", cascade=CascadeType.ALL)
    Recovery recovery;

    // some other variables...
}


这是恢复班,这是孩子。
@Data
@Entity
@Table(name="recovery")
public class Recovery {
    
    @Id
    @Column(name="voc_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int vocId;
    
    @OneToOne
    @PrimaryKeyJoinColumn(name="voc_id")
    Voc voc;

    // some other variables...
}

我正在尝试从this中走3号路。
但是当我调用 JpaRepository 的 save() 方法时,它会抛出错误消息 'Field 'voc_id' doesn't have a default value'。
我错过了什么?
还是有比这更好的方法来制作我想要的东西?

【问题讨论】:

    标签: java mysql spring jpa


    【解决方案1】:

    错误表明“voc_id”没有默认值,即在创建表时,如果 voc_id 不是 NULL,则您没有分配默认值。 因此,如果在代码中为 voc_id 分配了空值,它将引发异常。 避免此错误的最佳方法是在创建表查询中为所有 NOT NULL 属性定义一些默认值。 在您的情况下,您还需要检查它为什么会获得 null 值,因为它是自动生成的。

    【讨论】:

    • 是的,我知道它需要一些价值。但我想知道的是,如果我通过 JPA 将它们插入在一起,Recovery 的 vocId 不应该从 Voc 中获取 pk 值吗?我认为这是插入两个共享一个 PK 的实体的方式。一对一关系。
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 2017-11-15
    • 2014-12-07
    • 2015-07-19
    • 2019-02-09
    • 2020-09-30
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多