mysql - 使用 JPA/Spring/Hibernate 自动截断字符串列的方法?

标签 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 截断字符串,但我很好奇是否有更不严格的方法来执行此操作。

最佳答案

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

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

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

@Truncate(length=100)

关于mysql - 使用 JPA/Spring/Hibernate 自动截断字符串列的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910653/

相关文章:

mysql - SQL 更新替换时出错

php - 执行多个查询时 PHP 出现 MySQL 语法错误

mysql - 如何组合从数据库派生的两个查询

Mysql表替换或删除行

java - spring ehcache 没有这样的方法报错

java - 将 Java 字符对象值插入 Oracle CHAR(1) 列时出错

java - 如何使用 Java 中的通用方法来 CRUD MySQL 中的任何表,使用带有 Criteria 的 Hibernate,传递表名和/或字段作为参数?

java.lang.NoClassDefFoundError : kotlin/jvm/internal/Intrinsics in Spring Boot App

java - Hibernate Criteria 来自单个查询的多个 rowCounts

java - 如何在加入 HQL 时应用 2 个条件