我使用的是典型的User
- >与我的申请有Role
的关系。我正在利用Neo4j通过RelationshipEntity注释添加关系元数据的能力。由于某些无法解释的原因,当我坚持我的关系时,角色的属性被“剔除”了。
这是我的用户
public class Person {
@GraphId Long id;
private String name;
@RelatedToVia(type="HAS_ROLE")
@Fetch
private Set<UserRoleRelationship> roles = new HashSet<UserRoleRelationship>();
public Person() {}
public Person(String name) { this.name = name; }
}
作用
@NodeEntity
public class Role {
@GraphId Long id;
private RoleType roleType;
@SuppressWarnings("unused")
private String roleName;
private @Fetch Set<Privilege> defaultPrivileges;
}
RelationshipEntity
@RelationshipEntity(type="HAS_ROLE")
public class UserRoleRelationship {
@GraphId Long id;
@StartNode private Person person;
@EndNode private Role role;
private List<Privilege> privileges = new ArrayList<Privilege>();
}
RoleType(在Role
中使用)
public enum RoleType {
ADMIN("Administrator", Arrays.asList(new Privilege(PrivilegeType.PRIV1.name()),
new Privilege(PrivilegeType.PRIV2.name()),
new Privilege(PrivilegeType.PRIV3.name()),
new Privilege(PrivilegeType.PRIV4.name()))),
USER("User", Arrays.asList(new Privilege(PrivilegeType.PRIV1.name()))),
private String name;
private Set<Privilege> defaultPrivileges = new HashSet<Privilege>();
private RoleType(String name, List<Privilege> privileges){
this.name=name;
this.defaultPrivileges=new HashSet<Privilege>(privileges);
}
public String getName() {
return name;
}
public Set<Privilege> getDefaultPrivileges() {
return defaultPrivileges;
}
}
在填充与用户和角色的关系时,将设置所有数据。但是当我坚持它时,角色的数据现在为空。
// Before Save
UserRoleRelationship [id=null, person=Person [id=26, name=TestUser, roles=1], **role=Role [id=27, roleType=ADMIN, defaultPrivileges=[PRIV4, PRIV1, PRIV2, PRIV3]]**]
// After Save
UserRoleRelationship [id=6, person=Person [id=26, name=TestUser, roles=0], **role=Role [id=27, roleType=null, defaultPrivileges=null]**]
关于为什么我的角色对象发生这种情况的任何想法?
另外,这是我的Repos
public interface PersonRepository extends CrudRepository<Person, String> {
Person findByName(String name);
}
public interface RoleRepository extends CRUDRepository<Role> {
Role findByRoleType(RoleType rt);
Role findByRoleName(String name);
}
public interface UserRoleRepository extends CrudRepository<UserRoleRelationship, String> {}
答案 0 :(得分:0)
保存后重新填充UserRoleRelationship。
由于您在开始节点和结束节点上都没有@Fetch注释,因此只能以浅层方式加载它们。
我不建议在那里添加@Fetch,因为它可以轻松加载整个图表,所以我可能会使用
template.fetch(rel.person);
template.fetch(rel.role);