【问题标题】:org.hibernate.engine.jdbc.spi.SqlExceptionHelper 147 - Packet for query is too largeorg.hibernate.engine.jdbc.spi.SqlExceptionHelper 147 - 查询数据包太大
【发布时间】:2015-10-10 17:57:14
【问题描述】:

我在使用 hibernate 进行 DB 查询时遇到以下错误,它说查询的数据包太大。我不太明白它从哪里来。

21-07-2015 13:36:10,615 信息 [http-bio-9091-exec-7] com.aricent.aricloud.util.LoggerAspect 47 - 进入类 com.aricent.aricloud.dao.AricloudDAOImpl 方法 checkUserName
21-07-2015 13:36:10,626 警告 [http-bio-9091-exec-7] org.hibernate.engine.jdbc.spi.SqlExceptionHelper 145 - SQL 错误:0, SQLState:S1000
21-07-2015 13:36:10,630 错误 [http-bio-9091-exec-7] org.hibernate.engine.jdbc.spi.SqlExceptionHelper 147 - 查询数据包太大 (1083 > 1024)。您可以在 服务器通过设置 max_allowed_pa​​cket' 变量。

我已设置变量 ma​​x_allowed_pa​​cket=40M ,但数据包似乎以 1024 作为值。这个值是从哪里来的?

这是我选择发生问题的调用的方法。 UserEntity 表中只有 13 行,没有其他表有太多数据。如果我重新启动 mysql 应用程序开始工作,请告诉我如何永久解决此问题?

@Override
@SuppressWarnings("unchecked")
@Transactional
public UserEntity checkUserName(String userName) {
    Session session = mySessionFactory.getCurrentSession();
    Query q = session.createQuery("SELECT e FROM UserEntity e WHERE userName = :userName");
    q.setParameter(USER_NAME, userName);

    List<UserEntity> list = q.list();
    if (!list.isEmpty()) {
        return list.get(0);
    } else {
        return null;
    }
}

【问题讨论】:

  • 您的代码是正确的,并且您设置了正确的变量。也许你在错误的配置文件中设置了它并且 mysql 没有应用新的设置。尝试连接服务器并运行命令show variables like 'max_allowed_packet'
  • 我已经检查过了,它只给了我正确的值 40*1024*1024
  • 我遇到了同样的问题。 @bagui 你有解决方案吗?
  • 我没有得到任何特定的解决方案。但是当我升级到 MySQL v5.5 时,这个问题就消失了。似乎是 5.1 v 的问题

标签: java mysql hibernate jdbc


【解决方案1】:

如果您使用大型 BLOB 列或 长字符串。它应该与您要使用的最大 BLOB 一样大。 max_allowed_pa​​cket 的协议限制为 1GB。值应该是 1024的倍数; nonmultiples 向下舍入到最接近的值 多个。

【讨论】:

  • 嗨,对于我当前的应用程序和数据库架构,我没有使用任何大的 blob。我很想知道为什么会出现这种情况,因为我的数据库中的数据量非常少。 mysql也建议像我一样进行更改dev.mysql.com/doc/refman/5.5/en/packet-too-large.html
猜你喜欢
  • 2017-04-07
  • 2017-06-10
  • 2016-05-06
  • 2012-04-25
  • 2012-03-16
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多