我有一些实体类型需要额外的保存逻辑(准确地说,我想在保存时保存位置)。我不想使用任何特定于数据库的功能(例如触发器)来执行此操作,因为我不确定将来会使用什么数据存储。
所以我想覆盖 save()
方法。
在 Spring Data JPA 文档中,我可以看到两种为存储库类提供自己的实现的方法:
- 扩展基础存储库类并告诉 Spring Data 使用它。
- 使用实现类 (
PositionedRepositoryImpl
) 定义接口(interface)(在我的例子中,我假设为PositionedRepository
)。
第一种方法的问题 - 我不想为所有存储库实现它,只定位了两种实体类型。
第二种方式的问题 - 我无权访问基本存储库方法,因此除了位置计算之外,我需要以某种方式构建所有查询,通常由基本存储库提供。
有什么方法可以为特定的存储库类型扩展基本存储库类?
最佳答案
不要在存储库本身中执行该逻辑。将存储库视为 java 和数据库之间的哑层。它只是将数据从一端传递到另一端。
相反,您应该在不同的层处理这种情况。一个更聪明的人。业务逻辑层。
看这个例子:
@Service
public class MyEntityService{
private final MyEntityRepository myEntityRepository;
private final OtherEntityRepository otherEntityRepository;
@Autowired
public MyEntityService(MyEntityRepository myEntityRepository,
OtherEntityRepository otherEntityRepository){
this.myEntityRepository = myEntityRepository;
this.otherEntityRepository = otherEntityRepository;
}
public void save(MyEntity myEntity){
// do stuff with otherEntityRepository
myEntitiyRepository.save(myEntity);
}
}
关于java - 如何覆盖 Spring Data JPA 存储库基本方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51556184/