首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确处理Hibernate中的长数据

问正确处理Hibernate中的长数据
EN

Stack Overflow用户
提问于 2011-07-30 08:30:40
回答 3查看 5.3K关注 0票数 10

在hibernate中,我得到的数据太大了。那就是-

由: com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1527):数据截断:数据太长以致于第1行的列“FBZipLoc”在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) .

是否可能自动截断所有字段的数据。或者其他处理这个问题的方法。但是我不想检查所有字段的数据长度,因为我有超过1000个字段。

EN

回答 3

Stack Overflow用户

发布于 2011-07-30 10:10:02

据我所知,Hibernate或MySQL实际上不可能在不添加处理此操作的逻辑的情况下自动截断字符串。我之所以相信这样的东西是不存在的,是因为我从来不想让我要求插入到数据库中的内容与实际插入的内容有所不同。

我认为你唯一的选择是..。

  1. 更改列定义。使其成为更大的varchar字段,甚至可能是文本字段。不要花时间构建一个神奇的工具,只要更改列定义就可以在几次单击中修复这个问题。我建议你这么做!
  2. 我可以看到您使用某种方面来拦截设置程序,如果字符串长度大于x,则调整字符串的大小。这将是在您的代码中处理它的最快的原因。如果更改DB不是一个选项,而且您有数千个字段,那么这将是我的下一个选择。
  3. 构建了一个String util类,它可以调整字符串的大小. setText(String ){this.text= StringUtil.truncate(val,size);}

更新,因为您不能真正更新数据库,所以我推荐一个方面来拦截字符串集并检查它们的长度--它看起来可能是这样的(语法可能关闭,而我没有测试这个).

代码语言:javascript
复制
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);
}

此外,如果某个层必须检查定义的列大小与每次插入的表中的所有数据相对应,则会有一些额外的开销。

票数 4
EN

Stack Overflow用户

发布于 2011-07-30 17:00:46

为此您可以使用Hibernate拦截器。它将允许您在保存对象之前更改对象状态。您可以根据保存的特定列或特定类型轻松地调整字符串。

票数 2
EN

Stack Overflow用户

发布于 2013-05-29 19:06:02

如果您真正想要的话,可以将MySQL配置为截断数据:

如果未启用严格SQL模式,并且将值分配给超过该列最大长度的CHAR或VARCHAR列,则会截断该值以使其适合,并生成警告。对于非空格字符的截断,可以使用严格的SQL模式导致错误(而不是警告)并抑制值的插入。见5.1.7节,“服务器SQL模式”。

但是,对于生产数据库来说,这是不可取的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6882009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档