2016-08-03 10 views
3

Spring Data Neo4j 4プロジェクトで - BeforeSaveEventクラスは推奨されていません。SpringデータNeo4 - BeforeSaveEvent非推奨

はまた、以前に私は私のエンティティのためのセットアップを作成/更新日時するために、次のコードを使用:

@EventListener 
public void handleBeforeSaveEvent(BeforeSaveEvent event) { 
    Object entity = event.getEntity(); 
    if (entity instanceof BaseEntity) { 
     BaseEntity baseEntity = (BaseEntity) entity; 
     if (baseEntity.getCreateDate() == null) { 
      baseEntity.setCreateDate(new Date()); 
     } else { 
      baseEntity.setUpdateDate(new Date()); 
     } 
    } 
} 

しかし今、このリスナーが呼び出されていません。

Neo4j 4ではこのロジックの代替品はありますか?私は本当に例を感謝します。おかげ

UPDATED

以下の設定が機能していますが、私のテストのいくつかは、理由は、以前に保存されたエンティティにNULL日付で失敗している...何かがまだ間違って..です

明確化が見つかりました後この問題の理由と、このバグ修正Modifications during a onPreSave() event do not persist to the database

@Configuration 
@EnableExperimentalNeo4jRepositories(basePackages = "com.example") 
@EnableTransactionManagement 
public class Neo4jTestConfig { 

    @Bean 
    public Neo4jTransactionManager transactionManager() throws Exception { 
     return new Neo4jTransactionManager(sessionFactory()); 
    } 

    @Bean 
    public SessionFactory sessionFactory() { 
     return new SessionFactory("com.example") { 

      @Override 
      public Session openSession() { 
       Session session = super.openSession(); 

       session.register(new EventListenerAdapter() { 

        @Override 
        public void onPreSave(Event event) { 
         Object eventObject = event.getObject(); 
         if(eventObject instanceof BaseEntity) { 
          BaseEntity baseEntity = (BaseEntity) eventObject; 
          if (baseEntity.getCreateDate() == null) { 
           baseEntity.setCreateDate(new Date()); 
          } else { 
           baseEntity.setUpdateDate(new Date()); 
          } 
         } 
        } 

       }); 

       return session; 
      } 

     }; 
    } 

} 
+1

同じ問題に直面しています...私は[この質問]を見つけた(http://stackoverflow.com/questions/30604863/spring-data-neo4j-4-0-0-beforesaveevent-not-firing)ここにこれは私たちが現時点で行ってきたことです(GraphRepositoryの代わりにNeo4jTemplateを通して常にグラフエンティティを更新してください)。テンプレートを使用すると、before saveイベントが発生します。私はそれが理想的な解決策ではないことを知っていますが、あなたがより良い選択を見つけるまで、おそらくあなたを助けることができます。 – troig

+1

@troig、ありがとう!私はSDNリポジトリとセッションのミックスを使用しています..これは、特にリポジトリの場合のオプションではないようです。 – alexanoid

+0

はい、それは本当に良いオプションではないことを知っている... [sdn jira ](https://jira.spring.io/browse/DATAGRAPH-710)、多分あなたはそこを見ることができ、いくつかの返済を得ることができます。 – troig

答えて

3

を待っているあなたは春ダットを使用する必要がありますNeo4j(SDN)4.2.0.M1。これは正式にはまだリリースされていませんが、Spring Data Releaseプロセスを実行している間は自由にテストすることができます。

SDNのイベントコードは、さまざまな仕組みのために廃止されました。 1つ目は、Springデータがトランザクション認識イベントリスナーをサポートすることです。それらを実装する方法を確認することができますhere。 2つ目は、Neo4j OGMセッションをアプリケーションに自動で組み込み、そのイベント機能を利用できることです(register()メソッドを参照)。

最後に、2つの概念を結びつけて、OGMによって生成されたイベントをSpringで発生させることができます。

私たちはリリースを続けていますが、今は自分で遊んでください。

+0

私はまだ解決策を見つけることができません..私のテストは私の質問の構成で失敗します。何らかの理由で、このアプローチでは日付が正しく保持されません。 – alexanoid