6

Spring 3.1.1.RELEASE、JPA 2.0、および Hibernate 4.1.0.Final を使用しています。VARCHAR(100) タイプの MySQL 5.5 カラムがあります。値が 100 文字を超えるエンティティを保存すると、当然のことながら、保存はエラーで失敗します

SQL [n/a]; nested exception is org.hibernate.exception.DataException: Data truncation: Data too long for column 'MY_COL' at row 1

org.springframework.dao.DataIntegrityViolationException: データの切り捨て: 列のデータが長すぎます

Spring/Hibernate/JPA を設定して、文字列値が長すぎる場合、データが自動的に最大長に切り捨てられるようにする方法はありますか? String が 100 文字かどうかを自動的にチェックしてから Java で String を切り捨てるコードを追加できることはわかっていますが、これを行うためのより厳密でない方法があるかどうか知りたいです。

4

1 に答える 1

5

setString(String) メソッドに切り捨てを入れない理由はありますか? 常に 100 文字で切り捨てられるべきというドメイン ルールがあるように見えるので、それを強制します。

public void setName(String name) {
    this.name = name.length() > 100 ? name.substring(0,100) : name;
}

それが難しすぎて冗長に見え、常にこれを行っている場合は、Spring AOP を使用して独自のアノテーションを作成してみませんか?

@Truncate(length=100)
于 2013-11-11T16:07:25.723 に答える