Closed xingsheq closed 1 year ago
已验证,dao的java类名不能相同,即时在不同包也不行,请自行决定是否优化。
如果有同名不同包的类还是需要兼容的,这个我今天处理一下
看了下现在发布了的版本,同名不同包也是支持的 只是用法会有一些奇怪,需要再改改:
@Component("OtherServerVertexMapper")
public class ServerVertextMapper {}
@Resource("OtherServerVertexMapper$Proxy") ServerVertextMapper mapper;
现在可以这么用,奇怪的点是使用的时候多了一个 $Proxy
下个版本会把后面的 $Proxy
去掉,来保证声明跟使用的一致
如果有同名不同包的类还是需要兼容的,这个我今天处理一下
今天发现如果mapper.xml同名,vertex同名,但在不同包,selectById有几率查出来vertex的类型会混乱,报不能cast,请看看是否有这个bug。
如果有同名不同包的类还是需要兼容的,这个我今天处理一下
今天发现如果mapper.xml同名,vertex同名,但在不同包,selectById有几率查出来vertex的类型会混乱,报不能cast,请看看是否有这个bug。
tag类型是不一样的吧?NebulaDaoBasic的泛型是否也对应不同包名?
如果有同名不同包的类还是需要兼容的,这个我今天处理一下
今天发现如果mapper.xml同名,vertex同名,但在不同包,selectById有几率查出来vertex的类型会混乱,报不能cast,请看看是否有这个bug。
tag类型是不一样的吧?NebulaDaoBasic的泛型是否也对应不同包名?
tag是一样的,dao里面的vertex泛型是不同包的。泛型里面指定了space
@Data @Table(name = "host") @Space(name = "xx") public class HostVertex {
@Id
String name;
String neType;
}
如果有同名不同包的类还是需要兼容的,这个我今天处理一下
今天发现如果mapper.xml同名,vertex同名,但在不同包,selectById有几率查出来vertex的类型会混乱,报不能cast,请看看是否有这个bug。
tag类型是不一样的吧?NebulaDaoBasic的泛型是否也对应不同包名?
改了vertex的名字也是不行的,异常如下:
StackTrace=java.lang.ClassCastException: class com.xx.bj.model.vertex.BJHostVertex cannot be cast to class com.xx.dd.model.vertex.HostVertex (com.xx.bj.model.vertex.BJHostVertex and com.xx.dd.model.vertex.HostVertex are in unnamed module of loader 'app')
如果有同名不同包的类还是需要兼容的,这个我今天处理一下
今天发现如果mapper.xml同名,vertex同名,但在不同包,selectById有几率查出来vertex的类型会混乱,报不能cast,请看看是否有这个bug。
tag类型是不一样的吧?NebulaDaoBasic的泛型是否也对应不同包名?
改了vertex的名字也是不行的,异常如下:
StackTrace=java.lang.ClassCastException: class com.xx.bj.model.vertex.BJHostVertex cannot be cast to class com.xx.dd.model.vertex.HostVertex (com.xx.bj.model.vertex.BJHostVertex and com.xx.dd.model.vertex.HostVertex are in unnamed module of loader 'app')
实际上我用的是下面这个dao查的: public interface HostVertexMapper extends NebulaDaoBasic<HostVertex, String>
补充说明:BJHostVertex和HostVertex的的mapper.xml名字都是HostVertexMapper.xml,但BJHostVertex的HostVertexMapper.xml在mapper目录的子目录bj下面。HostVertex的HostVertexMapper.xml在mapper目录下。
使用的ngbatis版本是1.1.5
如果是相同tag不同space,确实存在映射不上的问题
按我理解,现在的文件结构如下:
是这个意思吗?
按我理解,现在的文件结构如下:
src
java
com.xx.bj.model
vertex
BJHostVertex (tag: host, space: xx1)
mapper
BJHostVertexMapper (NebulaDaoBasic<BJHostVertex, String>)
com.xx.dd.model
vertex
HostVertex (tag: host, space: xx2)
mapper
HostVertexMapper (NebulaDaoBasic<HostVertex, String>)
resources
mapper
bj
BJHostVertexMapper.xml (namespace: com.xx.bj.model.mapper.BJHostVertexMapper)
HostVertexMapper.xml (namespace: com.xx.dd.model.mapper.HostVertexMapper)
是这个意思吗?
mapper和model是同一层的,其他结构没有问题。
如果是相同tag不同space,确实存在映射不上的问题
有没有其他可以复用相同tag的vertex的,我看样例里面,mapper.xml里面可以指定space,那是不是我在vertex里面不使用@space,定义2个mapper.xml,配置2个不同space 就可以了吗?
ngbatis有个设计得不好的地方,同名tag在不同的space里,目前的版本只能映射到一个实体类,有同名时会冲突,可以先用不同 space 不同 tag名来处理,这个问题会在后续的版本修复
如果是相同tag不同space,确实存在映射不上的问题
有没有其他可以复用相同tag的vertex的,我看样例里面,mapper.xml里面可以指定space,那是不是我在vertex里面不使用@space,定义2个mapper.xml,配置2个不同space 就可以了吗?
在保持一个实体类跟标签名存在映射的情况下,确实可以定义多个Mapper继承NebulaDaoBasic<T, I>,两个Mapper,T相同,然后通过 xml 指定space,这个方案可以试试,好思路
不过可能存在的风险是,需要严格保持两个 space 下,同名 tag 的字段列表一致
项目中不同space的Vertex定义是一样的,如果才能实现复用? 我现在是通过java类复制到不同包下面,mapper.xml在mapper/子目录下面,但dao/mapper不能注册成功 The bean 'ServerVertexMapper$Proxy' could not be registered. A bean with that name has already been defined and overriding is disabled.