我创建了一个do {
promptUser(square);
printBoard(square);
}while(!fullBoard(square));
if(isLatinSquare(square)) {
System.out.println("you win");
}
else {
System.out.println("you lose");
}
printBoard(square);
bean。主键为Sub category_sums()
Set ws = ActiveWorkbook.Sheets("Test")
ws.Activate
Set MyRg1 = ws.Range("$A$2:$A$582")
Set MyRg2 = ws.Range("$H$2:$H$58")
ws.Range("J17").Formula = "=SumIf((MyRg1,""Auto/Transportation"", MyRg2)"
End Sub
列。这是bean的定义:
UserPreferences
现在,我使用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
不是val newUserPreferences = UserPreferences().apply { email = newUserRequest.email }
mUserPreferenceService.save(newUserPreferences)
。我的newUserRequest.email
中的null
设置是auto-dll
。执行此代码后,我看到application.yml
生成以下查询以创建表:
update
这时,应用程序无法加载,并出现以下错误:
产生原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 您的SQL语法有误;检查手册 对应于您的MariaDB服务器版本,以使用正确的语法 靠近“不为空”
看着异常,很明显代码失败了,因为休眠不是使用空的Hibernate
作为默认值,而是在生成的查询中简单地留了一个空格。所以这是我的问题:
create table user_preferences (
id varchar(255) default not null
email varchar(255),
primary key (id)
) engine=MyISAM
作为列默认值的情况?答案 0 :(得分:2)
我不是Hibernate用户,但我发现https://github.com/hibernate/hibernate-orm/blob/master/documentation/src/test/java/org/hibernate/userguide/schema/ColumnDefaultTest.java显示:
@ColumnDefault("'N/A'")
看来,当您为SQL字符串类型定义默认值时,必须在Java字符串内使用SQL字符串定界符(单引号)。对于您的情况,由于您需要一个空字符串,因此可以使用:
@ColumnDefault("''")
定义默认值的另一种方法是在@Column
批注中设置属性,如另一个Stack Overflow答案:How to set default value in Hibernate
所以这可能不是bug,但这是Hibernate的用法,对某些用户而言是违反直觉的,并且可能没有明确记录。
P.S .:我将其视为一个错误,即Hibernate仍会使用engine=MyISAM
unless you specify the right hibernate.dialect生成CREATE TABLE语句。不建议使用该存储引擎。在大多数情况下,MyISAM比InnoDB慢,并且不支持任何ACID属性。 MySQL已经淘汰了MyISAM,我不建议在任何当前项目中使用它。