加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在Hibernate中正确处理长数据

发布时间:2020-12-14 16:38:51 所属栏目:Java 来源:网络整理
导读:我在hibernate中收到一个数据太大的问题.那是- Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column ‘FBZipLoc’ at row 1 at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1527) at
我在hibernate中收到一个数据太大的问题.那是-

Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column ‘FBZipLoc’ at row 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1527)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1065)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
… 12 more

是否可能自动截断所有字段的数据.
或任何其他方式来处理这个问题.
但是我不想检查所有字段的数据长度,因为我有超过一千个字段.

解决方法

从我所知道的,Hibernate或 MySQL实际上没有办法自动截断字符串,而没有添加逻辑来处理这个.我相信这样的东西不存在的原因是,我永远不会想要我被要求插入到数据库中,而不是真正插入的内容.

我认为你唯一的选择是…

>更改列定义.使它成为一个更大的varchar字段,甚至可能是一个文本字段.只需更改列定义就可以在几次点击中修复这个问题,花点时间来构建一个魔术工具.我建议这样做!
>我可以看到你使用某种方面拦截setter,然后调整字符串的大小,如果它大于x长度.这将是您代码中处理最快的原因.如果更改数据库不是一个选项,并且您有成千上万的字段,这将是我的下一个选择.
>构建一个可以重新调整字符串大小的String util类

setText(String val){this.text = StringUtil.truncate(val,size);}

[UPDATE]
因为你不能真正更新数据库,我会推荐一个方面来拦截String setter并检查它们的长度,可能看起来像这样(语法可能是关闭的,我没有测试这个)…

private static final MAX_SIZE_OF_STRINGS = 255;

@Around("execution(* your.package.*.set*(..)) && args(java.lang.String)")
public void checkAroundSetter(final ProceedingJoinPoint pjp)
    throws Throwable {
    Object[] args = pjp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).size() > MAX_SIZE_OF_STRINGS) {
            args[i] = ((String)args[i]).subString(0,MAX_SIZE_OF_STRINGS) ;
        }
    }
    pjp.proceed(args);
}

而且,如果某个层必须检查定义的列大小与每个插入的表中的所有数据相匹配,那么将会有额外的开销.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读