Yay belgeleri burada http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/repositories.html#repositories.custom-implementations belgelerine, her iki havuzda da değil, tüm depolara veya tek bir depoya özel işlevsellik eklemek için örnek verir.Spring Jpa, tüm depolara özel işlevler ekleyerek ve aynı zamanda diğer özel işlevler için tek bir depoya
Tüm depolara (Özel Depo Fabrikası Bean'i kullanılarak) bazı özel işlevler eklemek ve sadece tek bir depoya (örneğin, bir Özel Arabirim ve bir Özel Impl kullanacağını söylüyor) bazı özel işlevler eklemek istiyorum; Bunu nasıl başarabilirim?
Tüm kod havuzlarına "setCurrentTenansInSession" yöntemini eklediğim bazı örnek kodlar; şimdi özel bir yöntem eklemek istiyorum, ör. "newCustomMethod", tek bir depoda (bu benim özel depo fabrikamda olduğu gibi bir MyJpaRepository). Bunu nasıl yaparım?
Özel davranış arayüzü:
@NoRepositoryBean
public interface MyJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
public void setCurrentTenantInSession(Object object);
}
Özel davranışı uygulaması:
public class MultiTenantSimpleJpaRepository<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements MyJpaRepository<T, ID> {
public void setCurrentTenantInSession(Object object) {
//custom impl
}
}
Özel depo fabrika fasulye:
public class MultiTenantJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable> extends JpaRepositoryFactoryBean<T, S, ID> {
@Override
protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
return new MultiTenantJpaRepositoryFactory(entityManager);
}
}
Ve nihayet özel depo fabrika:
public class MultiTenantJpaRepositoryFactory extends JpaRepositoryFactory {
public MultiTenantJpaRepositoryFactory(EntityManager entityManager) {
super(entityManager);
}
@Override
protected JpaRepository<?, ?> getTargetRepository(RepositoryMetadata metadata, EntityManager entityManager) {
final JpaEntityInformation<?, Serializable> entityInformation = getEntityInformation(metadata.getDomainType());
final SimpleJpaRepository<?, ?> repo = new MultiTenantSimpleJpaRepository(entityInformation, entityManager);
repo.setLockMetadataProvider(LockModeRepositoryPostProcessor.INSTANCE.getLockMetadataProvider());
return repo;
}
@Override
protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
return MultiTenantSimpleJpaRepository.class;
}
}
Çok teşekkürler kkamenev! – lincetto
"Spring-data-commons" 1.11 'jpa: depositods' için 'fabrika sınıfı' özelliğini kullanımdan kaldırılmış yerine 'base-class = "com.example.CommonCustomRepositoryImpl" 'belirtin. Baz sınıfı belirlenirken fabrikaya gerek yoktur. –