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

时间:2011-11-22 14:53:57

标签: java java-ee jpa

enter image description here

从上图中您可以看到MySQL数据库中的一列(表格问题),其中我有一个默认值为“已批准”的列。但是,如果我创建一个新的Question实例,则在对象上设置值而不是status属性,它在状态列中保持为null,而不是使用默认值。我是否需要在Java代码中设置默认值? (我坚持的地方)

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

  1. 使用default选项并在@Column注释中提供值。这是依赖于数据库的,需要检查这是否适用于MySQL

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

  3. 同样非常相似的帖子here

答案 2 :(得分:0)

在Java中默认值是最好的。

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

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