ngbatis
ngbatis copied to clipboard
how to get properties of all TAGs
gql语句:match(n) return n limit 10
xml中指定的类是HashMap
返回结果的格式如下:
1、我是想将不同点的数据处理一下,返回给前端的类中包含3个属性:id、tagNames、attributeMap,但如果返回的类不统一的话,就没有办法去处理,就会报错(例如:cup.modules.ngbatis.entity.Person cannot be cast to com.vesoft.nebula.client.graph.data.Node)
2、我发现原因是,我创建了Tag为person的对应的实体类Person,用@Table("person")声明;而xml返回结果会匹配@Table("")对应的tag,如果相同,就会自动用该@Table声明的实体类,然后其余不匹配的就会使用Node类,因此返回结果会出现Person类和Node都有。
3、请问应该怎么将这个匹配规则关闭呢
我试了下xml指定类为Node,结果报异常,看来是解决不了,宣告这种方法也失败了。
异常如下:
ResultSetUtil.if_unknown_relation_to_map = true;
ResultSetUtil.if_unknown_node_to_map = true;
可以看看这个未知类型自动转换成 map 的方式是否满足需求
在不是所有tag都定义了实体类的情况下,泛型的处理上是有点问题,还是会存在一些是实体,一些是map的情况。
ResultSetUtil.if_unknown_relation_to_map = true; ResultSetUtil.if_unknown_node_to_map = true;可以看看这个未知类型自动转换成 map 的方式是否满足需求
这个怎么用呢
这个是全局的设置,直接在 Springboot 主函数中设置就行。
还有个问题想请教一下,怎么实现随机返回10条数据呢,我用limit 10的话,每次返回的数据都是一样的,无法随机
试试加一个随机数的列,通过这个列排序? 不过不确定nebula支不支持这种方式
使用这个设置后,返回的结构就去全是LinkedHashMap了,结构如下:
这边是把实体类去掉了吗? 如果项目是动态的,是不需要定义实体类, 但如果不是动态的,还是建议把实体类都建上,可以规避项目中期追加实体类影响到原有结构的情况。
刚才请求错接口了,使用这个设置后,还是会存在一些是实体,一些是map的情况。
使用这个设置后,返回的结构就去全是LinkedHashMap了,结构如下:
这边是把实体类去掉了吗? 如果项目是动态的,是不需要定义实体类, 但如果不是动态的,还是建议把实体类都建上,可以规避项目中期追加实体类影响到原有结构的情况。
我们这是动态的也有,静态的也有,就是会有几个固定的tag需要创建实体类,需要加上,其余的就是动态的了
那应该不会存在现在是动态以后变静态,或者现在是静态以后变动态的情况吧,
如果这种情况存在,慎重一点的话,可能需要自定义一个 ResultHandler 把数据的处理固化下来。 在这个类中将动静的处理固化到项目中。
这种动静的返回的结构应该怎么处理呢,实体类和Node类都有
项目中自定义一个可以兼容动静的实体类,比如说CustomResult
然后再定义一个处理类 extends AbstractResultHandler<Collection, CustomResult>
需要兼容动静的dao方法使用 Collection<CustomResult> 来返回。
明白了,我去试一下
在实现的处理类中,可以拿到原始的 ResultSet,读取原始数据后,由项目来做过滤实现动静分流
@zhangxk-ocean 今天在整理文档,才想起你这个场景最合适的方式是以 NgVertex 的结果返回。 例如:
List<NgVertex> listVertex();
<select id="listVertex" resultType="org.nebula.contrib.ngbatis.models.data.NgVertex">
</select>
不过这个方式具备一定的入侵性。
