java - 如何覆盖 Spring Data JPA 存储库基本方法?

标签 java spring hibernate spring-data-jpa

我有一些实体类型需要额外的保存逻辑(准确地说,我想在保存时保存位置)。我不想使用任何特定于数据库的功能(例如触发器)来执行此操作,因为我不确定将来会使用什么数据存储。

所以我想覆盖 save() 方法。

在 Spring Data JPA 文档中,我可以看到两种为存储库类提供自己的实现的方法:

  1. 扩展基础存储库类并告诉 Spring Data 使用它。
  2. 使用实现类 (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/

相关文章:

java - 泛型类型参数给出错误,但通配符类型参数不会给出错误

java - Hibernate 关闭时运行脚本

java - 在 @ManyToMany 映射中,未将数据插入数据库(空指针异常)

java - 由于重复的 GUID,无法将数据库状态与 session org.hibernate.exception.ConstraintViolationException 同步

java - 无法连接到数据库

java - Eclipse - 如何处理自定义项目创建

java - 用户输入的总分、平均分、最低分和最高分(条件控制结构)

spring - Debezium 解决方案是什么来显示谁以及何时删除记录日志?

java - Spring Redis 在使用@Cacheable 或@CachePut 时将 POJO 保存为不同的类型

java - hibernate 3 : unable to query PostgreSQL database