【发布时间】:2019-02-07 20:04:00
【问题描述】:
我创建了一个UserPreferences bean。主键是id 列。这是bean的定义:
@Entity
public class UserPreferences {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(unique = true)
@ColumnDefault("")
private String id;
private String email;
// Getters and Setters
}
现在我使用Kotlin 在这个bean 中插入数据。这是执行此操作的代码:
val newUserPreferences = UserPreferences().apply { email = newUserRequest.email }
mUserPreferenceService.save(newUserPreferences)
让我们假设newUserRequest.email 不是null。我的application.yml 中的auto-dll 设置是update。执行此代码时,我看到 Hibernate 生成以下查询以创建表:
create table user_preferences (
id varchar(255) default not null
email varchar(255),
primary key (id)
) engine=MyISAM
此时,应用程序加载失败并出现以下错误:
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 接近'不为空,
查看异常,很明显代码失败了,因为没有使用空的String 作为默认值,hibernate 只是在生成的查询中放置了一个空格。所以这是我的问题:
- 这应该被视为 Hibernate 中的错误吗?
- 如何处理我希望将空字符串
""作为列默认值的情况?
【问题讨论】:
-
id varchar(255) default not null后面应该加逗号吗? -
是的,不知何故我错过了在我的问题中复制它
-
哦,好的。因为错误提到“正确的语法接近不为空”,因此引起了您的注意。
标签: java mysql hibernate spring-data-jpa