2017-02-16 10 views
1

springデータ@RepositoryRestResourceでneo4jを使用しようとしましたが、返されたjsonでは "id"フィールドはありません。この動作を変更するには?Neo4jとSpringデータ - 公開フィールド@GraphId

出力例:

{ 
    "_embedded" : { 
    "movies" : [ { 
     "name" : "movie1", 
    }, 
    ... 
} 

マイエンティティ:

@NodeEntity 
public class Movie { 

    @GraphId 
    Long id; 

    String name; 

    // getters and setters omitted for brevity 
} 

私のレポ:

@RepositoryRestResource(collectionResourceRel = "movies", path = "movies") 
public interface MovieRepo extends GraphRepository<Movie> { } 
+0

あなたはどのバージョンのSDNとSR-RESTを使用していますか? – digx1

答えて

0

春データRESTのデフォルト設定であるようです。下記の設定が役立ちました.IDはJSONで表示されます。

@Component 
public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter { 

    @Override 
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { 
     config.exposeIdsFor(Movie.class); 
    } 
} 

それはだか設定で公開されていない場合、私はそれが春データRESTパッケージの一部ではないためか、@RestControllerは異なる動作をし、常にIDを印刷していることも関係なく気づきました。

0

あなたのNeo4jベースのIDをあなたのRESTレスポンスに公開することを再検討したいかもしれません... SDRの作成者がデフォルトでエンティティのIDを含まない理由が考えられます。

Neo4jの場合、アプリケーションビューでNeo4j内部IDを公開して使用することは安全です。アプリケーション内の何もそれらを使用することで中断されることはありません。

つまり、Neo4jの内部IDはリサイクルされています。これはノードまたはリレーションシップの内部IDが12345で、ある時点でノードまたはリレーションシップが削除された場合、12345のIDは将来の再利用に適格になりますノードまたは関係。新たに利用可能なIDが将来、ある時点で再利用されると仮定することは賢明だと思います。これは、Neo4j内部IDが「安定」とはみなされず、アプリケーションの外部で使用されるべきではないという負の副作用があります。

新しい代理キーの例として、私はGraphAwareのneo4j-uuidプロジェクトhttps://github.com/graphaware/neo4j-uuidに向かうでしょう。このNeo4jプラグインを使用して、変更も更新もできないすべてのノードおよび関係に、一意で安定したUUIDを自動的に作成することができます。

関連する問題