Skip to content

Make overriding JpaRepositoryFactoryBean handy #3825

@jsunsoftware

Description

@jsunsoftware

Now to override JpaRepositoryFactoryBean and JpaRepositoryFactory and keeping default behivior we must also override setters of fields as they are private and there are no public/protected getters .

e.g

public class CpJpaRepositoryFactoryBean<T extends Repository<S, ID>, S, ID>

    extends JpaRepositoryFactoryBean<T, S, ID> {

private EntityPathResolver entityPathResolver;

private EscapeCharacter escapeCharacter = EscapeCharacter.DEFAULT;

private JpaQueryMethodFactory queryMethodFactory;

public CpJpaRepositoryFactoryBean(Class<? extends T> repositoryInterface) {
    super(repositoryInterface);
}

@Override
protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) {
    JpaRepositoryFactory jpaRepositoryFactory = new CustomJpaRepositoryFactory(entityManager);
    jpaRepositoryFactory.setEntityPathResolver(entityPathResolver);
    jpaRepositoryFactory.setEscapeCharacter(escapeCharacter);

    if (queryMethodFactory != null) {
        jpaRepositoryFactory.setQueryMethodFactory(queryMethodFactory);
    }

    return jpaRepositoryFactory;
}

@Autowired
@Override
public void setEntityPathResolver(ObjectProvider<EntityPathResolver> resolver) {
    super.setEntityPathResolver(resolver);
    this.entityPathResolver = resolver.getIfAvailable(() -> SimpleEntityPathResolver.INSTANCE);
}

@Override
public void setEscapeCharacter(char escapeCharacter) {
    super.setEscapeCharacter(escapeCharacter);
    this.escapeCharacter = EscapeCharacter.of(escapeCharacter);
}

@Autowired
@Override
public void setQueryMethodFactory(@Nullable JpaQueryMethodFactory factory) {
    super.setQueryMethodFactory(factory);

    if (factory != null) {
        this.queryMethodFactory = factory;
    }
}
}

Same is actual for JpaRepositoryFactory and QuerydslJpaPredicateExecutor.

Need to provide getters or make the properties protected

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: declinedA suggestion or change that we don't feel we should currently apply

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions