У меня есть 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. Как я могу получить все данные?
ОБНОВЛЕНИЕ!!
Я изменил класс, как ответ Луанны, и изменил класс пользователя следующим образом:
@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}]
Это мой репозиторий https://github.com/daviduck123/neo4j-ogm-infiniteloop