java如何将“查找或创建”方法提取到抽象类?(Spring数据Jpa)
我使用的是Spring Data JPA,我有一堆类似这样的存储库:
public interface CustomerRepository extends JpaRepository<Customer, Long> {}
在repositories下,我有很多服务,其中很多都需要实现方法findOrCreate(字符串名称),如下所示:
@Override
@Transactional
public List<Customer> findOrCreate(final String name) {
checkNotNull(name);
List<Customer> result = this.customerRepository.findByName(name);
if (result.isEmpty()) {
LOGGER.info("Cannot find customer. Creating a new customer. [name={}]", name);
Customer customer = new Customer(name);
return Arrays.asList(this.customerRepository.save(customer));
}
return result;
}
我希望将方法提取到抽象类或某个地方,以避免为每个服务、测试等实现它
抽象类可以如下所示:
public abstract class AbstractManagementService<T, R extends JpaRepository<T, Serializable>> {
protected List<T> findOrCreate(T entity, R repository) {
checkNotNull(entity);
checkNotNull(repository);
return null;
}
}
问题在于,在创建一个新对象之前,我需要以字符串的形式按名称查找对象。当然,接口JpaRepository不提供这种方法
我怎样才能解决这个问题
致意
# 1 楼答案
创建包含此行为的custom JpaRepository implementation。请参见this post以获取编写自定义JpaRepository实现的示例