50

プロジェクトの春のデータを検討しています。デフォルトで生成されたsaveメソッドをオーバーライドすることは可能ですか?はいの場合、どのように?

4

12 に答える 12

16

これがうまく機能しなかったので、必要なロジックをサービス クラスに入れ、リポジトリの保存メソッドはそのままにしました。

于 2012-12-10T09:26:44.177 に答える
10

SimpleJpaRepositoryを拡張すると思います:

public class **CustomSimpleJpaRepository** extends SimpleJpaRepository {

@Transactional
public <S extends T> S save(S entity) { //do what you want instead }
}

次に、以下を拡張して、デフォルトのSimpleJpaRepositoryの代わりにこれが使用されていることを確認します。

public class CustomJpaRepositoryFactory extends JpaRepositoryFactory {

    protected <T, ID extends Serializable> JpaRepository<?, ?> getTargetRepository(RepositoryMetadata metadata, EntityManager entityManager) {

      Class<?> repositoryInterface = metadata.getRepositoryInterface();
      JpaEntityInformation<?, Serializable> entityInformation = getEntityInformation(metadata.getDomainType());

      SimpleJpaRepository<?, ?> repo = isQueryDslExecutor(repositoryInterface) ? new QueryDslJpaRepository(
            entityInformation, entityManager) : new CustomSimpleJpaRepository(entityInformation, entityManager);
    repo.setLockMetadataProvider(lockModePostProcessor.getLockMetadataProvider());

      return repo;
  }
}

まだ完了していませんが、config xmlで使用するには、独自のファクトリBeanも必要です。

public class CustomRepositoryFactoryBean <T extends JpaRepository<S, ID>, S, ID extends Serializable> extends JpaRepositoryFactoryBean<T, S, ID> {

protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
    return new **CustomJpaRepositoryFactory**(entityManager);
}

}

構成:

<jpa:repositories base-package="bla.bla.dao" factory-class="xxxx.**CustomRepositoryFactoryBean**"/>

それが役に立てば幸い。

于 2013-02-09T22:02:24.750 に答える