问题一:字段名不存在

执行如下语句的时候呈现了问题:

Test entity = new Test();entity.setName(new RandomString().nextString());entity.setFatherTestId(new RandomString().nextString());Integer insNum = testMapper.insert(entity);

这里使用了mapper自带的insert办法向数据库中插入数据。

在用mapper进行插入的时候后,报了这样的谬误: 字段名不存在。

然而去数据表中查看,实际上是有fatherId这个字段的

就纳闷为什么后盾会找不到这个字段


并认真看红色的的报错,后盾说fatherid这个字段找不到。
这里我发现了端倪,数据库中表定义的是fatherId, i这个字母是大写的。

猜想是因为数据库字段大小写的问题

之后去谷歌之后找到了答案:

起因:在于PostgreSQL对表名、字段名都是辨别大小写的。在执行SQL时,那么不论你的SQL中字段是大写还是小写,最初都会默认转为小写去执行。

解决:

1. 数据库字段名改为小写。或者用下划线_宰割。
起初改为下划线后运行失常

2. 写sql语句的时候,对表名或者字段名加上双引号

定义SQL的时候,对表名及字段名加上双引号,能够避免大写字段被转为小写去执行。

因为在PGSQL中,默认对SQL语句进行抹去双引号和大写转小写的其中一个且抹去双引号优先级比拟高,因而当大写字段被加上双引号,只进行了抹去双引号的解决而不会再被转为小写了。

例如这样, 加上双引号。


最初因为我这里应用的是mapper自带的insert函数来进行数据插入,并没有本人写sql语句。
所以最初采纳了第一种形式解决。

问题二:char(32)类型字段,查问进去的数据带有空格

Integer insNum = testMapper.insert(entity);Assert.isTrue(insNum.equals(1), "insert success");String id = entity.getId();Test getEntity = testMapper.selectById(id);;Assert.isTrue(getEntity.getName().equals(entity.getName()), "name not equal");

在后盾单元测试的时候,进行了断言:插入的数据和查问进去的数据雷同。

也就是说,将一条数据插入到数据库中,再将其查问进去,判断这两个数据的属性都雷同。

然而单元测试始终没通过

在代码中打断点测试中发现,发现从数据库中查问进去的数据都带有空格。如下图。

猜想是因为postgresql在保留的时候会,主动将数据长度用空格补充至32位。

后果用testMapper自带的selectById办法查问出数据的时候,就会带有空格。

如果是这样的话,用mapper查问数据进去之后,还须要用trim()函数将空格一一去除。