neo4j使用中的常见问题

这篇具有很好参考价值的文章主要介绍了neo4j使用中的常见问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要记录我自己遇到的一些常见问题

1Spring Boot NEO

The client is unauthorized due to authentication failure

解决方法:找到你安装neo4j的路径下的conf文件夹,找到neo4j.conf

#dbms.security.auth_enabled=false

将前面的注释#去掉,然后重启neo4j,在重启项目即可。
注意,将上面设置为false以后,即登录时候,不进行验证,使用匿名登录,因此不管用户名密码输入什么,都可以登录
neo4j使用中的常见问题,图数据库neo4j,neo4j

Spring Data NEO日志无法打印cyper日志

我定义了如下一个根据userName打印的方法,但是SDN会为我生成什么样子的cypher语句

@Repository
public interface UserRepository extends Neo4jRepository<UserNode, Long> {
	
    List<UserNode> findByUserName(String userName);
}

关于无法打印日志,楼主反正也是一顿找,一开始百度,发现百度找不到NEO打印日志的内容,后来去GPT,发现GPT说的一点用没有(3.5GPT的数据截止于2021年,2021的网上关于SDN的数据,可能不太好吧),后来上stackoverflow也是查看了很多,也没找到我想要的答案,也可能是因为SDN的版本太多,各版本之间的差异吧。

首先,把根目录日志设置为debug,这时候日志很多,不用管,然后启动项目以后(这个生产环境是一定禁止的,这种行为不可以上生产,这里把root设置为debug,这是为了我们解决问题,后续这个得删除),进行查询以后,可以发现SDN给我们生成的cypher。

logging:
  level: 
    root: DEBUG

neo4j使用中的常见问题,图数据库neo4j,neo4j
以下是我们通过观察日志得出的,SDN的PartTreeNeo4jQuery记录执行方法,BoltRequest记录了执行的cypher

//这个类打印了我们具体执行的是哪一个cypher接口,方便我们直接定位我们执行的是哪个方法
o.s.d.n.r.query.PartTreeNeo4jQuery(简写)
org.springframework.data.neo4j.repository.query.PartTreeNeo4jQuery(完整路径)

//这个类则直接打印了,我们执行的具体的cypher语句
o.n.o.drivers.bolt.request.BoltRequest(简写)
org.neo4j.ogm.drivers.bolt.request.BoltRequest(完整路径)

现在我们将这两个类配置到yml,日志等级设置为debug,并且将之前的logging.level.root注释掉。需要注意的是,请不要无脑照抄下面的配置,而且通过我们上面的方法,找到是NEO中的哪个类在打印日志,然后将打印日志的那个类设置为debug。

logging:
  level: 
    #root: DEBUG
    org.springframework.data.neo4j.repository.query.PartTreeNeo4jQuery: DEBUG
    org.neo4j.ogm.drivers.bolt.request.BoltRequest: DEBUG

如果你使用的不是SpringBoot的默认日志,例如下面这样。使用logback或者log4j2这些框架,那么你需要将日志配置xml中

logging:
  config: classpath:logback-spring.xml
<logger name="org.springframework.data.neo4j.repository.query.PartTreeNeo4jQuery" level="DEBUG"/>
<logger name="org.neo4j.ogm.drivers.bolt.request.BoltRequest" level="DEBUG"/>

最终实现效果如下
neo4j使用中的常见问题,图数据库neo4j,neo4j

定义@RelationshipEntity导致@Relationship不能映射属性

当只有NodeEntity时

@Data
@NodeEntity("User")
public class UserNode {
	@Id
	@GeneratedValue
	private Long id;
	private String userName;
	private int userAge;
	private String userSex;
	@Relationship(type = "老公")
	private List<UserNode> laogong;
}
//此时user.getLaogong()不为null,能正确映射
UserNode user = userRepo.findById(id).orElse(null);

但是由于我需要在代码中创建user1和user2之间的关系,因此我定义了如下UserShip

UserShip userShip = new UserShip();
userShip.setStartNode(user1);
userShip.setEndNode(user2);
userShipRepo.save(userShip);
@Data
@RelationshipEntity("老公")
public class UserShip {
    @Id
    @GeneratedValue
    private Long id;  
	@StartNode
	private UserNode startNode;
	@EndNode
	private UserNode endNode;
}

这时候,我就发现,UserNode中的的Relationship的属性就为null

//此时user.getLaogong()为null
UserNode user = userRepo.findById(id).orElse(null);

当我尝试把UserShip这个类给删除掉以后,我发现又能查询到Relationship的属性了,或者@RelationshipEntity注释掉也可以,或者换个关系名字,只要不和@Relationship(type = “老公”)的名字一样就行了。

注释掉就能查询
//@RelationshipEntity("老公")

或者换个和@Relationship(type = "老公")不一样的关系
@Relationship(type = "老公xxx")

官方示例代码如下,我发现官方代码中@Relationship这里不是在node节点,而是ship节点

@NodeEntity
public class Actor {
    Long id;
    @Relationship(type="PLAYED_IN") private Role playedIn;
}

@RelationshipEntity(type = "PLAYED_IN")
public class Role {
    @Id @GeneratedValue   private Long relationshipId;
    @Property  private String title;
    @StartNode private Actor actor;
    @EndNode   private Movie movie;
}

@NodeEntity
public class Movie {
    private Long id;
    private String title;
}

因此我尝试修改代码,把原本的node节点换成ship节点,并且还原了UserShip的代码

@RelationshipEntity("老公")
public class UserShip {
    @Id
    @GeneratedValue
    private Long id;  
	@StartNode
	private UserNode startNode;
	@EndNode
	private UserNode endNode;
}

@Relationship(type = "老公")
//private List<UserNode> laogong;
private List<UserShip> laogong;

当我在次查询,出现Json序列化循环依赖
neo4j使用中的常见问题,图数据库neo4j,neo4j
通过查看后台的数据发现,已经取值到子节点了,但是发现startNode节点出现:

Exception occurred in target VM occurred invoking method.

这个问题好解决,因为startNode节点就是本身就是Relationship属性的父节点,在这里userNode节点是西子,startNode节点也是西子,因此嵌套了,我们将startNode忽略Json格式化即可
neo4j使用中的常见问题,图数据库neo4j,neo4j

import com.fasterxml.jackson.annotation.JsonIgnore;

@JsonIgnore
@StartNode
private UserNode startNode;

如下是我们最后的一个实现效果及代码,需要注意的时候,你如果需要打印UserNode节点时,一定要重写toString,否则也会出现循环嵌套的问题,导致堆栈溢出。
如果你的endNode节点中也存在循环嵌套的问题,那么你也需要将嵌套的节点进行格式化忽略。
neo4j使用中的常见问题,图数据库neo4j,neo4j

我使用Spring Data neo 5.3.9.RELEASE
这是我定义的User节点
@Data
@NodeEntity(“User”)
public class UserNode {
@Id
@GeneratedValue
private Long id;
private String userName;
private int userAge;
private String userSex;
@Relationship(type = “老公”)
private List laogong;
}
我通过下面这个方法能获取user对象,并且该对象有laogong这个属性值
UserNode user = userRepo.findById(id).orElse(null);

但是当我定义了一个UserShip以后
@Data
@RelationshipEntity(“老公”)
public class UserShip {
@Id
@GeneratedValue
private Long id;
@StartNode
private UserNode startNode;
@EndNode
private UserNode endNode;
}
user对象的laogong属性为null了
这是怎么回事?我该怎么处理?文章来源地址https://www.toymoban.com/news/detail-622785.html

Cypher

到了这里,关于neo4j使用中的常见问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • neo4j 网址拒绝访问问题解决

      1、win+R打开 2、输入cmd    3、输入neo4j console,回车 4、上面的窗口不要关闭,复制上述网址在浏览器打开 ,

    2024年02月02日
    浏览(34)
  • NEO4J的基本使用以及桌面版NEO4J Desktop导入CSV文件

    因为我也刚接触知识图谱,就是小白,本篇博客相当于一些入门级的Cypher语句的举例,然后具体说明一下NEO4J Desktop导入CSV文件是怎么实现的,以及他的一些基本操作,适合刚接触的小伙伴。如果大家对于NEO4J的配置有疑问的话可以参考文章NEO4J桌面版的配置和连接Pycharm_neo4

    2024年01月23日
    浏览(34)
  • Neo4j容器无法重新启动的问题!

    每次neo4j启动一段时间后,某个时间点neo4j停了就再也启动不起来了,必须要重新安装Neo4j容器才行。 当无法启动的时候,查看日志只有下面这个提示,过2-3s后就container容器就消失了,docker ps -a 结果是Exits(1),非正常退出。 2023-10-07T08:43:51.768284320Z Changed password for user \\\'neo4j\\\'.

    2024年02月05日
    浏览(32)
  • 图数据库(四):Neo4j中的删除操作

    Delete 在Neo4j中说到删除节点,我们第一时间想到的肯定是Delete。 的确我们也经常使用Delete来删除节点。 删除节点 如果节点,没有关联关系那可以直接使用delete删除 如果节点存在关联关系,那么我们使用delete删除就会报错 此时如果一定要删除,那么我们可以使用deta

    2024年02月13日
    浏览(37)
  • 图数据库(五):Neo4j中的更新操作

    学过Mysql的人都知道,对于数据库的操作大多数都是增删改查,同样对于Neo4j图数据库也一样,今天我们就学习一下Neo4j中的更新操作。 使用set来修改节点,属性的值,但是如果该属性没有就新增该属性 此时我们可以看到,在id为172的Role节点中没有age属性,我们使用set属性就

    2024年02月07日
    浏览(37)
  • 图数据库(六):Neo4j中的查询操作

    上一篇文章我们学习了Neo4j中的更新操作,今天我们学习一下Neo4j的查询。 说到查询我们就不得不提到Match 查询所有节点 条件查询 在条件查询的过程中我们经常会使用where来进行过滤,有时候我们还可以使用到With,With可以看成用于向后面的查询传递结果

    2024年02月09日
    浏览(50)
  • Neo4j在Ubuntu 20.04上安装、配置以及Python连接使用 - Neo4j

    1. 进入要安装neo4j的ubuntu环境。 2. 添加Debian资源库。 java 1.8.xx版本对应neo4j 3.xx版本(jdk 11版本对应neo4j 4.xx版本): (1)wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - (2)echo \\\'deb https://debian.neo4j.com stable 3.5\\\' | sudo tee /etc/apt/sources.list.d/neo4j.list(或者:echo \\\'deb

    2024年02月04日
    浏览(35)
  • 图数据库Neo4j——SpringBoot使用Neo4j & 简单增删改查 & 复杂查询初步

    图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍如何在SpringBoot中使用Neo4j图数据库,如何进行简单的增删改查,以及如何进行复杂

    2024年02月06日
    浏览(41)
  • 网络中的权威度量:Neo4j中的Eigenvector Centrality算法

    Eigenvector Centrality(特征向量中心性)是一种衡量节点在网络中权威度的指标,它考虑了节点的直接连接以及其邻居节点的重要性。在图数据科学中,Eigenvector Centrality可以帮助我们识别网络中的关键权威节点。本文将详细介绍如何在Neo4j图数据库中实现Eigenvector Centrality算法,

    2024年01月22日
    浏览(32)
  • 网络中的权威与中心性:Neo4j中的HITS算法

    HITS(Hyperlink-Induced Topic Search)算法是一种用于评估网页权威性和中心性的算法,它通过计算网页之间的相互引用关系来识别网络中的关键节点。在图数据科学中,HITS算法可以帮助我们理解网络中的信息流动和权威结构。本文将详细介绍如何在Neo4j图数据库中实现HITS算法,并

    2024年01月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包