The alias 'xxx' is already mapped to the value 'com.demo.xxx'

报错信息

1
2
3
4
5
6
7
8
Caused by: org.apache.ibatis.type.TypeException: The alias 'xxx' is already mapped to the value 'com.demo.xxx'.
at org.apache.ibatis.type.TypeAliasRegistry.registerAlias(TypeAliasRegistry.java:151)
at org.apache.ibatis.type.TypeAliasRegistry.registerAlias(TypeAliasRegistry.java:144)
at org.apache.ibatis.type.TypeAliasRegistry.registerAliases(TypeAliasRegistry.java:133)
at org.apache.ibatis.type.TypeAliasRegistry.registerAliases(TypeAliasRegistry.java:122)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.typeAliasesElement(XMLConfigBuilder.java:118)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:99)
... 64 more

解决方法

看到网上说各种冲突的问题,实际上我并没那么复杂的问题,只是因为一个类被我移到了另一个包里,但是依旧提示原来的类已经存在,我清理完缓存就可以继续运行了,如果我的方案不行,请查阅其他博客。

思考

其实在这段报错的上级报错是说sqlsession创建错误,想到sqlsession的话,可以去思考一下Mybatis的一二级缓存。
然后的话我猜想,我的类原本已经查出来了,放到了二级缓存里面,二级缓存不同的sqlsession是共享的,于是会存在包名的冲突。在创建sqlsession的时候查询二级缓存,结果缓存的包名不对,自然就创建错误了。