プロジェクトの春のデータを検討しています。デフォルトで生成されたsaveメソッドをオーバーライドすることは可能ですか?はいの場合、どのように?
質問する
77847 次
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 に答える