2016-03-19 17 views
2

モデルはUserにロールのリストがあり、ロールにはパーミッションのリストがあります。しかし、一度にすべてを保存しても - 深さ-1で、親ノードから子ノードを取得できません。 ex:user.getRoles() - 2 [role1、role2] role1.getAssociatedFeature() - 0 ただし、DBからロールを取得した場合 例:findByRoleName( 'role1') - > [Role:role1、Display役割、associatedFeatures [2]springデータを使用してneo4j内のネストされたオブジェクトを保存および取得する方法

User.java

@NodeEntity 
public class User { 

@GraphId Long id; 
private String name; 
private String loginUserName; 

@Relationship(type="ROLE") 
private Set<Role> associatedRoles = new HashSet<Role>(); 

} Role.java

@NodeEntity 
public class Role { 

    @GraphId Long id; 
    private String roleName; 
    private String displayRoleName; 
    @Relationship(type="ACCESS_TO") 
    private Set<Feature> associatedFeatures = new HashSet<Feature>(); 
} 
Feature.java 
@NodeEntity 
public class Feature { 
    @GraphId Long id; 
    private String featureName; 
    @Relationship(type="HAS_PERMISSION") 
    private Set<Permission> permissions = new HashSet<Permission>(); 
} 
@NodeEntity 
public @Data class Permission { 
    @GraphId 
    Long id; 
    String permission; 
} 

Iは、CRUD操作を使用するスプリングデータJPAを使用しています: <> Repository.java - これは、削除、保存、更新を実装bydefault私は新しいユーザーエンティティを作成し、許可にデータのすべての方法を移入しています私のJunit-で

@RepositoryRestResource() 
public interface RoleRepository extends GraphRepository<Role>{...} 

ServiceImpl.java 
    @Override 
     public User create(User u) { 
      return userRepo.save(u,-1); 
     } 

があります。しかし、私がユーザーをフェッチするとき - >私はチェーンに沿ってロールだけではなく、機能を得ることができます。

neo4j DBブラウザでは、すべてのノードが適切な依存関係で作成されていることがわかります。どのようにグラフを保存し、横断するためのポインタ?

答えて

2

デフォルトの読み込み深度は1です。これは、ユーザーと関連する役割は取得できますが、役割の機能やグラフのより深い部分は取得しないことを意味します。

デフォルトはあなたが望むものでない場合には、負荷の深さを指定することができます。

userRepo.findOne(user.getId(), 3);

http://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#_fine_grained_control_via_depth_specification

+1

おかげでビンス!!それはうまくいった。私は深さ "-1"すなわちすべてを保存していた - しかし、私はカスタムのfind(findByName)を使用していたが、GraphRepositoryで定義されたものではなく、フェッチするためにデフォルトの負荷深度を使用していた。 回答をアップアップするのに十分なポイントがありません。だから、今すぐ言いました:) –

+0

問題ありません。ちょうどFYI、保存深度に-1を指定する必要はありません。これは保存のデフォルトの深度です。永続化している最上位レベルのオブジェクトからすべて到達可能です。 – Vince

関連する問題