nebula-contrib / ngbatis

NGBATIS is a database ORM framework base NebulaGraph + spring-boot, which takes advantage of the mybatis’ fashion development, including some de-factor operations in single table and vertex-edge, like mybatis-plus. NGBATIS 是一款针对 NebulaGraph + Springboot 的数据库 ORM 框架。借鉴于 MyBatis 的使用习惯进行开发。https://graph-cn.github.io/ngbatis-docs/
https://nebula-contrib.github.io/ngbatis/
Apache License 2.0
132 stars 42 forks source link

select got SemanticError: Space was not chosen #150

Open helomaki opened 1 year ago

helomaki commented 1 year ago

org.nebula.contrib.ngbatis.exception.QueryException: 数据查询失败: 数据查询失败SemanticError: Space was not chosen. image image image

helomaki commented 1 year ago

用 官方的demo 跑的

CorvusYe commented 1 year ago

https://github.com/nebula-contrib/ngbatis/blob/master/src/main/java/org/nebula/contrib/ngbatis/NgbatisContextInitializer.java#L73-L73

可以在这里断点看下吗,感觉像配置没生效

yuzyf commented 1 year ago
image

您好我也报同样的问题、watch org.nebula.contrib.ngbatis.proxy.MapperProxy getSpace '{params,returnObj,throwExp}' -n 5 -x 3 这个的是有space的、但是最后报错 Caused by: org.nebula.contrib.ngbatis.exception.QueryException: 数据查询失败SemanticError: Space was not chosen. at org.nebula.contrib.ngbatis.proxy.MapperProxy.executeWithParameter(MapperProxy.java:232) ... 63 common frames omitted

yuzyf commented 1 year ago
image

这里面的localSession的space是空的、会是啥原因导致的呢

CorvusYe commented 1 year ago

Hi, @yuzyf 用的是 1.1.2 的版本吧,是的话,可以有两个做法

  1. 一个是先把 sessionPool 的功能关掉,这个版本有一些问题

    nebula.ngbatis.use-session-pool: false
  2. 升级到 1.2.0-SNAPSHOT 版本,这个版本合并了PR144,修复了 sessionPool 不读取 yml space 的问题,快照版本需要在 pom.xml project标签内添加块照仓库:

    <repositories>
        <repository>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
            <id>ossrh</id>
            <name>Nexus Snapshot Repository</name>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
        </repository>
    </repositories>
yuzyf commented 1 year ago
nebula.ngbatis.use-session-pool: false

版本是1.1.1呢

CorvusYe commented 1 year ago

版本是1.1.1呢

试试在这个地方断点看看 https://github.com/nebula-contrib/ngbatis/blob/v1.1.1/src/main/java/org/nebula/contrib/ngbatis/proxy/MapperProxy.java#L261 这一行执行失败也可能导致 Space was not chosen.

yuzyf commented 1 year ago

版本是1.1.1呢

试试在这个地方断点看看 https://github.com/nebula-contrib/ngbatis/blob/v1.1.1/src/main/java/org/nebula/contrib/ngbatis/proxy/MapperProxy.java#L261 这一行执行失败也可能导致 Space was not chosen.

好的、我再试试

CorvusYe commented 1 year ago

嗯嗯,或者到数据库中执行下 SHOW SPACES 看看这个 space 是不是不存在。

yuzyf commented 1 year ago

嗯嗯,或者到数据库中执行下 SHOW SPACES 看看这个 space 是不是不存在。

已经解决了哈、我同事创建speace的时候多了个空格😂、导致执行sql的时候、其实代码的space是不存在、才报的Space was not chosen.这个错误、建议是不是可以提示的再明确些好一些呢、最后非常感谢您的支持

CorvusYe commented 1 year ago

嗯嗯,刚刚也有考虑在执行 use space 的正行获取 ResultSet 如果 err_code 不是 SUCCESS 直接抛错,可能会友好一些。

或者如果可以的话,提个PR也行~

yuzyf commented 1 year ago

嗯嗯,刚刚也有考虑在执行 use space 的正行获取 ResultSet 如果 err_code 不是 SUCCESS 直接抛错,可能会友好一些。

或者如果可以的话,提个PR也行~

好的、

zwzdream commented 1 year ago

嗯嗯,或者到数据库中执行下 SHOW SPACES 看看这个 space 是不是不存在。

已经解决了哈、我同事创建speace的时候多了个空格😂、导致执行sql的时候、其实代码的space是不存在、才报的Space was not chosen.这个错误、建议是不是可以提示的再明确些好一些呢、最后非常感谢您的支持

我今天下午也遇到了,nebula-studio创建的space最前面多一个空格,然后适配的时候,use space阶段报错。知道这个错误也解决不了,ngbatis 赋值space时默认去掉首尾空格,但是 nebula-studio创建space,首尾空格有效,不知道这是不是nebula有意为之,好在dev可以随便删除空间再创建

ngbatis后面是否考虑支持这种不去除空格的方式 列如 nebula.space: playground()或者其他方式

CorvusYe commented 1 year ago

我今天下午也遇到了,nebula-studio创建的space最前面多一个空格,然后适配的时候,use space阶段报错。知道这个错误也解决不了,ngbatis 赋值space时默认去掉首尾空格,但是 nebula-studio创建space,首尾空格有效,不知道这是不是nebula有意为之,好在dev可以随便删除空间再创建

ngbatis后面是否考虑支持这种不去除空格的方式 列如 nebula.space: playground()或者其他方式

@zwzdream 刚刚测了下,配置读取时是可以携带空格的,但因为执行空间切换时未对空间名首尾做边界确定导致执行时空格被忽略。 已经在这个提交中修复 a99851c

对应 yml 的配置,需要用 引号 将空格纳入,如:

nebula:
-  space: test  
+  space: "test  "
wey-gu commented 1 year ago

请问大家的 studio 版本是? 可以来 report 一下么? https://github.com/vesoft-inc/nebula-studio

CorvusYe commented 1 year ago

请问大家的 studio 版本是? 可以来 report 一下么? https://github.com/vesoft-inc/nebula-studio

我这边用的是 v3.4.0 的版本 image

wey-gu commented 1 year ago

Aha, sorry, I thought the space was automatically added, if it's introduced by user, then it's just a char escaping issue:

see:

(root@nebula) [(none)]> create space ` test `(vid_type = fixed_string(30));
Execution succeeded (time spent 2.117ms/107.990125ms)

Wed, 17 May 2023 16:24:57 CST

(root@nebula) [(none)]> use ` test `
[ERROR (-1005)]: SpaceNotFound: SpaceName ` test `

Wed, 17 May 2023 16:25:04 CST

(root@nebula) [(none)]> use `\ test\ `
Execution succeeded (time spent 1.05ms/24.459334ms)

Wed, 17 May 2023 16:25:10 CST