【发布时间】:2016-01-07 02:12:44
【问题描述】:
我有 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;
}
}
这是我的角色类
@NodeEntity
public class Role {
@GraphId
Long id;
@NotNull
String name;
@Relationship(type = "HAS_ROLE",direction = Relationship.OUTGOING)
@JsonIgnore
private Set<UserRole> userRoles;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<UserRole> getUserRoles() {
return userRoles;
}
public void setUserRoles(Set<UserRole> userRoles) {
this.userRoles = userRoles;
}
public Role() {
super();
}
}
这是我的 UserRole 类
@RelationshipEntity(type = "HAS_ROLE")
public class UserRole {
@GraphId
Long id;
@StartNode
@Relationship(type="HAS_ROLE", direction=Relationship.INCOMING)
User user;
@EndNode
@Relationship(type="HAS_ROLE", direction=Relationship.INCOMING)
Role role;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public UserRole(User user, Role role) {
super();
this.user = user;
this.role = role;
}
public UserRole() {
super();
}
}
我想显示所有用户数据,但结果总是显示 userRoles NULL。我正在使用 findAll(1) 和 findAll(2),但没有什么不同。
它与 SDN 3 不同,我们只在字段中添加了@Fetch。在 SDN 4 中,没有 @Fetch 注释。我如何获取所有数据?
更新!!
我更改了 Luanne 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"}}]
但在那之后我尝试再次显示所有数据,并再次像这样返回 NULL:
[{"id":27,"username":"daviduck123","password":"admin","firstName":"David","lastName":"Vincent","role":"admin","active":null,"roles":null}]
【问题讨论】:
-
用户应该有对 UserRole 的引用,而不是直接引用 Roles,这可能是问题
-
是的。它只有在我保存数据后才起作用,然后它又恢复为空。但是当我使用 UserRole 类时,它的无限循环。
-
奇怪,UserRole 应该可以工作。你能把你的 neo4j-ogm 依赖升级到 1.1.4 吗?这里可能还有其他一些(固定的)错误在起作用。如果问题仍然存在,请在github.com/neo4j/neo4j-ogm/issues 使用您的示例代码打开一个问题
-
我已经将 neo4j-ogm 升级到 1.1.4 但仍然无法正常工作。好的,我会在那里打开问题。希望我能找到一些解决方案。谢谢
标签: spring neo4j fetch spring-data-neo4j-4 neo4j-ogm