Closed ydq closed 2 years ago
如果是误将基本类型返回值当成了实体类,应该在Finder处理,不建议PR中直接改的SimpleTypeUtil
,作用不同,影响范围不同。
如果是误将基本类型返回值当成了实体类,应该在Finder处理,不建议PR中直接改的
SimpleTypeUtil
,作用不同,影响范围不同。
@abel533 嗯,确实没考虑这么多,主要是看到 SimpleTypeUtil
只有 JpaEntityClassFinder
有在使用,所以就直接在 SimpleTypeUtil
中去修改了
PR 已经重新推送了,将调整放在了 Finder 中
引入 jpa 模块后,执行 insert 操作时获取实体类型出错,导致表名错误、字段也没能获取到,最终导致sql错误而无法执行
debug 追了一下,问题出在
JpaEntityClassFinder#isEntityClass
方法判断有误该方法调用了
SimpleTypeUtil#isSimpleType
判断是否为基础类型时SimpleTypeUtil
中有定义一个静态方法registerPrimitiveTypes
去注册int
等这些原始类型,但代码中没有去调用这个方法初始化而 insert、update、delete 方法的返回值为原始类型 int,所以会误将 int 类型作为了 Entity 类型来处理
因为 spi
JpaEntityClassFinder
类 获取实体类型 的时候 没有重写findEntityClass
方法,所以调用的是父类的方法该方法优先使用 当前调用的 mapper 方法的返回值作为 Entity 类型
而 insert 相关的方法 返回的是受影响的行数,是个 int,所以导致获取的 EntityClass 成了 int
最后在 JpaEntityClassFinder#isEntityClass 中判断是否为实体类型,检查的时候没有匹配 基础原始类型
导致 生成的sql错误
只测试了 insert 相关的方法,没测试其他方法,猜测 update / delete 应该也都有问题