0

使用休眠进行数据访问。

我在数据库中有一个列:

varchar(40), default value is set to 0, NOT NULL

我有一个案例,该用户发送空值,并收到错误:

Error: org.hibernate.exception.ConstraintViolationException: Cannot insert the value
    NULL into column 'foo', table 'MyTable'; column does not allow nulls. INSERT fails.

hibernate 中的列定义如下:

@Column(name = "foo")
private String foo;

问题可能出在哪里?我必须在休眠注释或smthing中定义默认值吗?如何?还是有其他建议?

4

3 回答 3

2

尝试插入列时,您期望会发生NULL什么NOT NULL?要么你想强制执行一个NOT NULL约束,然后你需要拒绝用户输入,要么你想接受NULL值并且需要指定该列可以为空,当然,@Column(nullable = true).


因为当用户不提供该字段时,您实际上需要列中的默认值,并且您的代码明确设置字段值,即使它为空(或空,例如,对于 Oracle 也是如此),我建议场上更聪明的二传手:

private String foo = "0";

public String getFoo() {
    return foo;
}

public void setFoo(String foo) {
    if (foo != null && !foo.isEmpty()) { // Or StringUtils.isNotBlank(foo)
        this.foo = foo;
    }
}
于 2012-09-20T10:03:37.587 回答
0

的默认值为foonull,因为它是类字段。

因为您要保存的默认值为 0。foo如果可能,请制作原始类型,即int. 如果foo必须是字符串,那么您可以删除非空约束,因为即使您不为 赋值foo,也有默认值 0。

建议:考虑使用 Hibernate-Tools 自动生成 POJO 类。这将从现有数据库自动生成您的 POJO 类。

于 2012-09-20T10:05:30.673 回答
0

If you table do not allow null value you sould respect that and adopt your model.

As you are using @Column annotation you should first set the property nullable to false, to support the default value you should also use the column definition.

@Column(name = "foo", nullable = false, columnDefinition = “varchar(40) default 0″)
于 2012-09-20T10:06:48.363 回答