保存到Neo4j删除值

时间:2014-12-20 15:03:35

标签: java neo4j spring-data-neo4j

我使用的是典型的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> {}

1 个答案:

答案 0 :(得分:0)

保存后重新填充UserRoleRelationship。

由于您在开始节点和结束节点上都没有@Fetch注释,因此只能以浅层方式加载它们。

我不建议在那里添加@Fetch,因为它可以轻松加载整个图表,所以我可能会使用

template.fetch(rel.person);
template.fetch(rel.role);