当前位置: 首页 > 知识库问答 >
问题:

Hibernate不尊重nullable=true在@JoinCol列注释中

叶冥夜
2023-03-14

我有两个实体

@Entity
@Table(name = "Documents")
public class Document extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(nullable = true, name = "asset_id")
    private Asset asset;


    @ManyToOne( targetEntity = Debt.class,
            fetch = FetchType.LAZY, optional = false)
    @JoinColumn(nullable = true, name = "debt__id")
    private Debt debt;
}


@Entity
@Table(name = "debts")
public class Debt extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "debt", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Document> documents;
}

此映射:

@ManyToOne( targetEntity = Debt.class,
            fetch = FetchType.LAZY, optional = false)
    @JoinColumn(nullable = true, name = "debt_id")
    private Debt debt;

最近增加了。

在运行应用程序时,应用程序崩溃,错误是:通过JDBC语句执行DDL“alter table documents add debt__idbigint not null”时出错

我检查了Hibernate发送到数据库的sql查询,它是:更改表文档添加debt_idbigint不null

此查询失败,因为文档表上已经有记录,因此无法添加不带默认值的不可为空列。

那么,为什么@JoinCol列注释中的nullable=true会被hiberNate忽略。

我到处都找不到答案。这是一款spring boot应用,如果有帮助的话。

共有1个答案

刘和昶
2023-03-14

只需从@ManyToOne中删除optional=false。这就是罪魁祸首。此外,您不需要在@JoinColumn中提及nullable=true,这在默认情况下是true

@ManyToOne( targetEntity = Debt.class,
        fetch = FetchType.LAZY)
@JoinColumn(name = "debt__id")
private Debt debt;
 类似资料:
  • 在Hibernate中,要指定用于加入关联的列,请使用@JoinCol列注释,例如: 在大多数情况下,列的名称是用大写的类名加上。因此,从Hibernate自动派生它是合理的(例如,在Django的ORM中就是这样做的)。但这样的行为是以某种方式实施的吗?

  • 我有一个班级组织,只有很少的字段,如下所示。 为了在客户端以简单的方式处理日期,我将转换为,并使用这些JsonSerializer将其发送给客户端,如下所示 我有一个endpoint,它将执行get organization并像下面这样在响应映射中插入结果。 但是我在客户端看到的最终结果JSON是 这里的日期以某种形式出现,而不是很长。如果我使用Jackson转换相同的数据,而不使用云endpoi

  • 问题内容: 我有一个使用Hibernate为HSQL db生成表的应用程序(因为我的应用程序仍在开发中)。在我的域模型中,我已经设定 当我使用DBVisualizer打开数据库时,可以看到所有设置都正确,除了它无法正常工作外,我的列接受的长度超过10个字符的值。当我尝试在DBVisualier中手动运行查询时,它会失败,但是应该进入休眠状态。 同样非常奇怪的是,当我使用文件(而不是在内存db中)以

  • 问题内容: 我在Java中看到一些声明为的方法: 有什么意义吗?这是否意味着输入可能是? 如果没有注释,输入仍然可以为null,所以我猜不仅仅是吗? 问题答案: 它清楚地表明该方法接受空值,并且如果您覆盖该方法,则还应该接受空值。 它也为诸如FindBugs之类的代码分析器提供了提示。例如,如果这样的方法取消引用其参数而不先检查null,则FindBugs将发出警告。

  • @UniqueConstraint和@Column(unique = true)有什么区别? 例如: 和

  • 问题内容: 在Hibernate中如何注释Blob列?到目前为止,我有一堂课,有: 问题答案: @Lob应该可以解决blob和clob(使用String作为类型)