モデルは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ブラウザでは、すべてのノードが適切な依存関係で作成されていることがわかります。どのようにグラフを保存し、横断するためのポインタ?
おかげでビンス!!それはうまくいった。私は深さ "-1"すなわちすべてを保存していた - しかし、私はカスタムのfind(findByName)を使用していたが、GraphRepositoryで定義されたものではなく、フェッチするためにデフォルトの負荷深度を使用していた。 回答をアップアップするのに十分なポイントがありません。だから、今すぐ言いました:) –
問題ありません。ちょうどFYI、保存深度に-1を指定する必要はありません。これは保存のデフォルトの深度です。永続化している最上位レベルのオブジェクトからすべて到達可能です。 – Vince