Java 持久化实体后,数据库表中的默认列值为null

Java 持久化实体后,数据库表中的默认列值为null,java,jakarta-ee,jpa,Java,Jakarta Ee,Jpa,从上图中可以看到MySQL数据库中的一列(表问题),其中有一列的默认值为“Approved”。但是,如果我创建了一个新的问题实例,请在status列中设置对象的值,而不是status属性的值,并将其保持为null,而不是使用默认值。我是否需要在Java代码中设置默认值?(在我坚持的地方)是的。当实体的持久字段为空时,JPA不会忽略它。它在生成的insert/update语句中将列设置为null。因此,必须在Java中将其设置为默认值。实体的构造函数可以是设置此类默认值的适当位置。是。当实体的持久


从上图中可以看到MySQL数据库中的一列(表问题),其中有一列的默认值为“Approved”。但是,如果我创建了一个新的问题实例,请在status列中设置对象的值,而不是status属性的值,并将其保持为null,而不是使用默认值。我是否需要在Java代码中设置默认值?(在我坚持的地方)是的。当实体的持久字段为空时,JPA不会忽略它。它在生成的insert/update语句中将列设置为null。因此,必须在Java中将其设置为默认值。实体的构造函数可以是设置此类默认值的适当位置。

是。当实体的持久字段为空时,JPA不会忽略它。它在生成的insert/update语句中将列设置为null。因此,必须在Java中将其设置为默认值。实体的构造函数可能是设置此类默认值的合适位置。

是的,您需要在实体类中提供默认映射,因为hibernate不支持默认值(始终),您可以通过两种方式来实现:

  • 使用
    default
    选项并在@Column注释中提供值。这取决于数据库,需要检查这是否适用于MySQL

  • 正如其他海报所说,在构造函数中用“Approved”值初始化变量


  • 同样与post非常相似

    是的,您需要在实体类中提供默认映射,因为hibernate不支持默认值(始终),您可以通过两种方式来实现:

  • 使用
    default
    选项并在@Column注释中提供值。这取决于数据库,需要检查这是否适用于MySQL

  • 正如其他海报所说,在构造函数中用“Approved”值初始化变量


  • 同样非常相似的是,在Java中默认值是最好的

    您还可以在@Column中将insertable设置为false,但除非进行刷新,否则对象和数据库将不同步


    EclipseLink还支持从数据库返回字段值,但仅在Oracle上支持(除非使用存储过程)。

    在Java中默认值是最好的

    您还可以在@Column中将insertable设置为false,但除非进行刷新,否则对象和数据库将不同步


    EclipseLink还支持从数据库返回字段值,但仅在Oracle上支持(除非使用存储过程)。

    我使用的是EclipseLink,但可能也适用于此。它是内置的还是可配置的行为?EclipseLink也适用于此。对不起,我的思维通常等于JPA和Hibernate。这同样适用于日食。它是不可配置的:持久性字段被设置为持久性字段,其值是写入数据库的值。这是一件好事,因为它不是这样的,它必须在每次插入/更新后刷新实体,以重新加载数据库设置的默认值。我正在使用EclipseLink,但这可能同样适用。它是内置的,还是可配置的行为?同样的事情也适用于EclipseLink。对不起,我的思维通常等于JPA到Hibernate。这同样适用于日食。它是不可配置的:持久性字段被设置为持久性字段,其值是写入数据库的值。这是一件好事,因为它不是这样的,它必须在每次插入/更新之后刷新实体,以重新加载数据库设置的默认值。