进阶之路:Java Web开发DEBUG实录(持续更新)详解编程语言

BUG1:SpringMVC + Tomcat启动报错

用Tomcat启动项目时报错:Error during artifact deployment. See server log for details.

Debug
发现web容器配置文件web.xml中applicationContext.xml、spring-mvc.xml的等spring容器配置文件均无法被识别;
Project Structure → Modules → 将Resource所在文件夹标记为Resources,问题解决。
在这里插入图片描述

BUG2:springboot默认数据源Hikari数据库连接池报错

HikariPool Connection is not available, request timed out after 60003ms

Debug
通过追踪日志,发现提示:cannot acquire JDBC connection
猜想可能是因为数据源连接池的最大连接数不足,连接池甚至来不及通过connection.close()方法回收已建立的连接,客户端便发起新的Web请求查询数据库,建立了新的数据库连接。于是连接池中的连接很快被耗尽,无法再响应客户端新发起的查询数据库的请求。
在springboot的application.properties中添加如下配置:

spring.datasource.hikari.maximum-pool-size=150 

扩充最大连接数,问题解决。

BUG3:Hibenate4使用HQL语句查询集合出现重复数据

3.1 情况出现原因

在建表时没有设置主键,但是由于Hibernate框架的要求,在实体类中必须设置主键,也就是必须有一个字段被@Id注解标记。
使用HQL查询数据集合时:

getSession().createQuery(hql).list() 

查出数据是重复的。
这是因为使用HQL查询数据时,默认情况下主键的值是不可重复的,但在数据库表中没有设置主键,而表中多行数据该字段下的值出现了重复,这与HQL的默认设定相违背。
但list方法会查出多条符合HQL查询条件的数据,也就是查询出的集合(List<Pojo>)大小为N,于是HQL采取的对策是:只查出第一条数据,然后将这条数据复制多次,直到将集合填满(重复复制N次)。

3.2 解决办法

需在两处地方进行修改:
Java代码:在实体类中新建字段为主键,或设置其他值不会重复的字段为主键(@Id注解标记)。
数据库:将新设置的实体类主键对应的表的字段设为主键(Primary Key)。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19596.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论