我在使用hibernate进行数据库查询时遇到以下错误,它说查询的数据包太大了。我不太明白它的来源。
21-07-2015 13:36:10,615 INFO [http-bio-9091-exec-7] com.aricent.aricloud.util.LoggerAspect 47 - 输入的课程 com.aricent.aricloud.dao.AricloudDAOImpl方法checkUserName
21-07-2015 13:36:10,626 WARN [http-bio-9091-exec-7] org.hibernate.engine.jdbc.spi.SqlExceptionHelper 145 - SQL错误:0, SQLState:S1000
21-07-2015 13:36:10,630错误 [HTTP-生物9091-EXEC-7] org.hibernate.engine.jdbc.spi.SqlExceptionHelper 147-用于查询的包太大(1083> 1024)。您可以更改此值 服务器通过设置max_allowed_packet'变量。
我已设置变量 max_allowed_packet = 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;
}
}
答案 0 :(得分:-1)
如果使用大型BLOB列,则必须增加此值 长串。它应该与您想要使用的最大BLOB一样大。 max_allowed_packet的协议限制为1GB。价值应该是 1024的倍数; nonmultiples向下舍入到最近 数倍。