【发布时间】:2011-11-22 14:53:56
【问题描述】:
从上图中,您可以看到 MySQL 数据库(表 Question)中的一列,其中有一列的默认值为“已批准”。但是,如果我创建一个新的 Question 实例,请在对象上设置值而不是在 status 属性上设置它在 status 列中保持 null 而不是使用默认值。我是否需要在 Java 代码中设置默认值? (我坚持的地方)
【问题讨论】:
标签: java jakarta-ee jpa
从上图中,您可以看到 MySQL 数据库(表 Question)中的一列,其中有一列的默认值为“已批准”。但是,如果我创建一个新的 Question 实例,请在对象上设置值而不是在 status 属性上设置它在 status 列中保持 null 而不是使用默认值。我是否需要在 Java 代码中设置默认值? (我坚持的地方)
【问题讨论】:
标签: java jakarta-ee jpa
是的。当实体的持久字段为空时,JPA 不会忽略它。它在生成的插入/更新语句中将列设置为空。因此,您必须将其设置为 Java 中的默认值。实体的构造函数可能是设置此类默认值的合适位置。
【讨论】:
是的,你需要在你的实体类中提供默认映射,因为休眠不支持默认值(总是),你可以通过两种方式做到:
使用default 选项并在@Column 注释中提供值。这取决于数据库,需要检查这是否适用于 MySQL
正如其他海报所说,在构造函数中使用“已批准”值初始化您的变量
也是非常相似的帖子here
【讨论】:
在 Java 中默认值是最好的。
您还可以在 @Column 中将 insertable 设置为 false,但是除非您进行刷新,否则您的对象和数据库将不同步。
EclipseLink 还支持从数据库返回字段值,但仅限于 Oracle(除非使用存储过程)。
【讨论】: