从上图中您可以看到MySQL数据库中的一列(表格问题),其中我有一个默认值为“已批准”的列。但是,如果我创建一个新的Question实例,则在对象上设置值而不是status属性,它在状态列中保持为null,而不是使用默认值。我是否需要在Java代码中设置默认值? (我坚持的地方)
答案 0 :(得分:3)
是。当实体的持久字段为空时,JPA不会忽略它。它在生成的insert / update语句中将列设置为null。因此,您必须将其设置为Java中的默认值。实体的构造函数可以是设置此类默认值的适当位置。
答案 1 :(得分:1)
是的,您需要在Entity类中提供默认映射,因为hibernate不支持默认值(总是),您可以通过两种方式实现:
使用default
选项并在@Column注释中提供值。这是依赖于数据库的,需要检查这是否适用于MySQL
正如其他海报所说,在构造函数中使用“Approved”值初始化变量
同样非常相似的帖子here
答案 2 :(得分:0)
在Java中默认值是最好的。
您也可以在@Column中将insertable设置为false,但是除非您进行了刷新,否则您的对象和数据库将不同步。
EclipseLink还支持从数据库返回字段值,但仅支持在Oracle上(除非使用存储过程)。