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 截断字符串,但我很好奇是否有不那么严格的方法来做到这一点。

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 回答