neo4j java@query注解属性替换问题

我在做springboot整合neo4j时,遇到不少坑,让我耗时最长,也是最无语的一个坑就是注解属性替换问题,做个笔记记录一下

首先neo4j整合成功,然后可以通过自带的新增,删除,查询方法,做一些简单的操作,但当你想做一个自定义查询的时候就得在Dao层编写方法,就在这里

import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.Neo4jRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Repository
public interface DimingDao extends Neo4jRepository<Diming,Long> {

    
    List<Diming> queryshort(String name1, String name2);
}

方法是写好了,但谁来实现成了问题,这时候就要用到@Query注解。我网上查了很多,发现不少人是这么写的

 通过{}来替换字符串中的值,很多人都这么写的,而我就不行,总给我报错,说语法不对。于是我问了一个好心的大佬,告诉我说不要用{},而是用' '单引号,我信了,果然没报错。但他给neo4j传的值就是name,不是name的值,我无语了。。。。

于是乎,我又找到一个博主,终于解答了我的疑惑,我们可以用$符来替换值,就比如上面那个例子,不用{},也不用' ',而是直接用$name就ok了

@Repository
public interface DimingDao extends Neo4jRepository<Diming,Long> {

    @Query(value = "match (a:diming{name:$name1}),(b:diming{name:$name2}) ,p=shortestpath((a)-[*..10]->(b)) return p")
    List<Diming> queryshort(@Param(value="name1") String name1,@Param(value="name2") String name2);
}

还得注意添加@Param注解

但是我又遇到一个问题,如果我传的是对象怎么办?

刚开始我是这么写的,他给我报语法错误

@Repository
public interface DimingDao extends Neo4jRepository<Diming,Long> {
    @Transactional
    @Query(value = "match (a:diming{id:$diming.getId}) set a.name=$diming.getName")
    void update(@Param(value = "diming") Diming diming);
}

最后还是没能解决,不想找了,妥协了。。。。

于是我就给他单独传了id和name

@Repository
public interface DimingDao extends Neo4jRepository<Diming,Long> {
    @Transactional
    @Query(value = "match (a:diming{id:$id}) set a.name=$name")
    void update(@Param(value = "id") Long id,@Param("name") String name);
}

这个问题虽然解决了,但发现又冒出一个问题,neo4j既然不能通过id查询。。。。新发现哈。。。

这里青岛这个节点的id为9,

 我试着根据id查找节点,既然找不到

 有谁知道原因的评论区解答下呗,实在不行这个我也妥协,单独设置id属性

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值