0

データ アクセスに休止状態を使用します。

データベースに列があります:

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

ユーザーが null 値を送信し、エラーが発生するケースがあります。

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

また、休止状態の列は次のように定義されています。

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

問題はどこにあるのでしょうか? 休止状態の注釈または何かでデフォルトを定義する必要がありますか? どのように?または他の提案はありますか?

4

3 に答える 3

2

列に挿入しようとするとどうなると思いNULLましたか?NOT NULL制約を適用してNOT NULLからユーザー入力を拒否するか、NULL値を受け入れて、もちろん、を使用して列がnull許容であることを指定する必要があります@Column(nullable = true)


ユーザーがそのフィールドを指定しない場合、実際には列にデフォルト値が必要であり、コードがフィールド値をnull(または空、たとえば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ます。に値を割り当てなくても、デフォルト値 0 があるため、文字列でなければならない場合は、null 以外の制約を削除できます。foofoo

提案 : Hibernate-Tools を使用した POJO クラスの自動生成を検討してください。これにより、既存のデータベースから POJO クラスが自動生成されます。

于 2012-09-20T10:05:30.673 に答える
0

テーブルに null 値を許可しない場合は、それを尊重してモデルを採用する必要があります。

@Column アノテーションを使用しているため、最初に nullable プロパティを false に設定する必要があります。デフォルト値をサポートするには、列定義も使用する必要があります。

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