使用JPA / Spring / Hibernate自动截断String列的方法?

时间:2013-11-11 16:00:37

标签: mysql spring hibernate jpa jpa-2.0

我正在使用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截断字符串,但我很好奇是否有一个不那么严格的方法来执行此操作。

1 个答案:

答案 0 :(得分:2)

你有没有理由不把截断放在你的setString(String)方法中?看来你有一个域规则,它总是被截断为100个字符,所以强制执行它:

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

如果这看起来太难和冗长,并且你一直这样做,为什么不使用Spring AOP并创建自己的注释呢?

@Truncate(length=100)