Spring数据Neo4j 4-@Fetch对findAll(int-depth)的更改总是返回null

Spring数据Neo4j 4-@Fetch对findAll(int-depth)的更改总是返回null,spring,neo4j,fetch,spring-data-neo4j-4,neo4j-ogm,Spring,Neo4j,Fetch,Spring Data Neo4j 4,Neo4j Ogm,我有3个类,分别是User、Role和UserRole。我想获取UserRole的数据,但总是返回NULL 这是用户类 @NodeEntity public class User { @GraphId Long id; @NotNull private String username; @NotNull private String password; @NotNull private String firstName;

我有3个类,分别是User、Role和UserRole。我想获取UserRole的数据,但总是返回NULL

这是用户类

@NodeEntity
public class User {
    @GraphId
    Long id;

    @NotNull
    private String username;

    @NotNull
    private String password;

    @NotNull
    private String firstName;

    @NotNull
    private String lastName;

    @NotNull
    private String role;

    @NotNull
    private Boolean active;

    @Relationship(type = "HAS_ROLE", direction = Relationship.OUTGOING)
    private Set<UserRole> userRoles;

    public User() {
        super();
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public Boolean getActive() {
        return active;
    }

    public void setActive(Boolean active) {
        this.active = active;
    }

    public Iterable<UserRole> getUserRoles() {
        return userRoles;
    }

    public void setUserRoles(Set<UserRole> userRoles) {
        this.userRoles = userRoles;
    }
}
我想显示所有用户数据,但结果总是显示userRoles NULL。我使用findAll(1)和findAll(2),但没有什么不同

它与SDN 3不同,我们只在字段中添加@Fetch。在SDN4中,没有@Fetch注释。如何获取所有数据

更新

我更改了Luane answer之类的类,并修改了User类,如下所示:

@NodeEntity
public class User {
    @GraphId
    Long id;

    @NotNull
    private String username;

    @NotNull
    private String password;

    @NotNull
    private String firstName;

    @NotNull
    private String lastName;

    @NotNull
    private String role;

    @NotNull
    private Boolean active;

    @Relationship(type = "HAS_ROLE")
    private Set<UserRole> userRoles;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public Boolean getActive() {
        return active;
    }

    public void setActive(Boolean active) {
        this.active = active;
    }

    @Relationship(type = "HAS_ROLE")
    public Set<UserRole> getUserRoles() {
        return userRoles;
    }

    @Relationship(type = "HAS_ROLE")
    public void setUserRoles(Set<UserRole> userRoles) {
        this.userRoles = userRoles;
    }

    public User(){
        super();
    }
}
[{"id":27,"username":"daviduck123","password":"admin","firstName":"David","lastName":"Vincent","role":"admin","active":null,"roles":{"id":"29","name":"ROLE_ADMIN"}}]
[{"id":27,"username":"daviduck123","password":"admin","firstName":"David","lastName":"Vincent","role":"admin","active":null,"roles":null}]
但在此之后,我尝试再次显示所有数据,并再次返回空值,如下所示:

@NodeEntity
public class User {
    @GraphId
    Long id;

    @NotNull
    private String username;

    @NotNull
    private String password;

    @NotNull
    private String firstName;

    @NotNull
    private String lastName;

    @NotNull
    private String role;

    @NotNull
    private Boolean active;

    @Relationship(type = "HAS_ROLE")
    private Set<UserRole> userRoles;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public Boolean getActive() {
        return active;
    }

    public void setActive(Boolean active) {
        this.active = active;
    }

    @Relationship(type = "HAS_ROLE")
    public Set<UserRole> getUserRoles() {
        return userRoles;
    }

    @Relationship(type = "HAS_ROLE")
    public void setUserRoles(Set<UserRole> userRoles) {
        this.userRoles = userRoles;
    }

    public User(){
        super();
    }
}
[{"id":27,"username":"daviduck123","password":"admin","firstName":"David","lastName":"Vincent","role":"admin","active":null,"roles":{"id":"29","name":"ROLE_ADMIN"}}]
[{"id":27,"username":"daviduck123","password":"admin","firstName":"David","lastName":"Vincent","role":"admin","active":null,"roles":null}]

这是我的存储库

@RelationshipEntity表示两个节点之间的限定关系,因此在其中使用@relationship是不正确的

UserRole
应该是

@RelationshipEntity(type = "HAS_ROLE")
public class UserRole {
    @GraphId
    Long id;

    @StartNode
    User user;

    @EndNode
    Role role;
角色
类中关系的方向应该是传入的,因为您正在定义从
用户
角色
角色关系:

    @Relationship(type = "HAS_ROLE",direction = Relationship.INCOMING)
    @JsonIgnore
    private Set<UserRole> userRoles;

   @Relationship(type = "HAS_ROLE",direction = Relationship.INCOMING)    
   public Set<UserRole> getUserRoles() {
        return userRoles;
    }

   @Relationship(type = "HAS_ROLE",direction = Relationship.INCOMING)   
   public void setUserRoles(Set<UserRole> userRoles) {
        this.userRoles = userRoles;
    }
@Relationship(type=“HAS_ROLE”,direction=Relationship.INCOMING)
@杰索尼奥雷
私有用户角色集;
@关系(type=“HAS_ROLE”,direction=Relationship.INCOMING)
公共集合getUserRoles(){
返回用户角色;
}
@关系(type=“HAS_ROLE”,direction=Relationship.INCOMING)
public void setUserRoles(Set userRoles){
this.userRoles=userRoles;
}

确保accessor和mutator方法也进行了注释(当您有传入关系时,必须进行注释)。

我想Luane的解决方案会起作用,我们应该使用它。但我还有另一项工作要做。 您可以在存储库中使用@Query自定义查询。在查询中,您可以返回所需的所有对象,并将它们描述到地图中

@Query("match (ac: Address) <-[:at]- (c: Company) <-[:of]- (p: Position) -[:at]-> (a: Address) "
        + "where p.name =~ {0} return p as position, c as company, a as address, ac as companyAddress skip {1} limit {2}")
List<Map<String, Object>> fetchByTitle(String title, int start, int pageSize);

@Query(“匹配(ac:地址)我已经这样更改了UserRole类,Role类也一样,在getter和setter中添加了注释,但是当显示所有用户数据时,我仍然得到空userRoles。你确定你在图中有正确的数据吗?也就是说,它与预期的标签和关系一起保存?我有一些数据,其中3个有关系,另一个没有。我看了Neo4j图形,它显示节点“具有_角色”"。图中的图片可以在用户处看到,用户应该引用UserRole,而不是直接引用Roles,这可能是问题所在。是的。保存数据后,它才起作用,然后返回null。但是当我使用UserRole类时,它的无限循环。奇怪的是,UserRole应该起作用。你能将你的neo4j ogm依赖项升级到1.1.4吗这里可能有其他(已修复)错误。如果问题仍然存在,请使用示例代码在此处打开问题我已将neo4j ogm升级到1.1.4,但仍然无法工作。好的,我将在此处打开问题。希望我能找到一些解决方案。谢谢