実際に GraphRepository を実装する必要はありませんが、拡張します。の原則Spring-Data
は、すべてのボイラープレート CRUD コードが (起動時にプロキシによって) 処理されるため、GraphRepository を拡張する特定のエンティティのインターフェイスを作成し、必要な特定のメソッドのみを追加するだけです。
例えば; エンティティがあればCustomerNode
、標準の CRUD メソッドを作成するために、新しいインターフェイスを作成できますCustomerNodeRepository extends GraphRepository<CustomerNode,Long>
。すべてのメソッドGraphRepository
(save、findAll、findOne、delete、deleteAll など) はCustomerNodeRepository
、実装コードを 1 行も書かなくても Spring-Data-Neo4J からアクセスして実装できるようになりました。
このパターンにより、単純な CRUD ではなく、特定のリポジトリ コード (findByNameAndDateOfBirth など) で作業できるようになりました。
Spring-Data パッケージは、リポジトリとのやり取りに非常に役立ちます。膨大な量のコードを削減でき (コード行が 80% 以上削減されています)、使用することを強くお勧めします。
編集: カスタム実行の実装
独自のカスタム動作を Repository メソッドに追加する場合は、インターフェイスとカスタム実装をマージするという概念を作成します。たとえば、呼び出されるメソッドを作成したいfindCustomerNodeBySomeStrangeCriteria
とします。これを行うには、実際にリレーショナル データベースにリンクして関数を実行したいとします。
最初に、'extra' メソッドのみを含む個別のスタンドアロン インターフェイスを定義します。
public interface CustomCustomerNodeRepository {
List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object strangeCriteria);
}
次に、通常のインターフェイスを更新して、GraphRepository だけでなく、新しいカスタム インターフェイスも拡張します。
public interface CustomerNodeRepository extends GraphRepository<CustomerNode,Long>, CustomCustomerNodeRepository {
}
最後の部分は、実際にfindCustomerNodeBySomeStrangeCriteria
メソッドを実装することです
public class CustomerNodeRepositoryImpl implements CustomCustomerNodeRepository {
public List<CustomerNode> findCustomerNodeBySomeStrangeCriteria(Object criteria) {
//implementation code
}
}
そのため、注意すべき点がいくつかあります。
- カスタム実装を持つカスタムメソッドを定義する別のインターフェースを作成します (Spring-Data 互換の「findBy...」メソッドとは異なります)。
- CustomerNodeRepository インターフェース (「メイン」インターフェース) は、GraphRepositoryと「カスタム」インターフェースの両方を拡張します。
- カスタム インターフェイスのみを実装するクラスでは、「カスタム」メソッドのみを実装します。
- 「カスタム」実装クラスは、(デフォルトで)
Impl
Spring Data によってピックアップされる「メイン」インターフェースと呼ばれる必要があります (したがって、この場合CustomNodeRepositoryImpl
)
カバーの下で、Spring Data は、自動構築されたとクラス実装CustomerNodeRepository
のマージとして のプロキシ実装を提供します。クラスの名前の理由は、Spring Data が簡単に/正常に取得できるようにするためです (これは上書きできるため、*Impl を検索しません)。GraphRepository
CustomCustomerNodeRepository