【问题标题】:How to make @Indexed as unique property for Redis model using Spring JPA Repository?如何使用 Spring JPA Repository 将 @Indexed 作为 Redis 模型的唯一属性?
【发布时间】:2022-02-01 14:04:50
【问题描述】:

我有一个存储在 Redis 中的模型类,我将 Jpa Repository 与 Spring java 一起使用。如果给定模型已经存在于 Db 中,通常(不使用 redis)jpa 存储库会保存新数据或更新(有条件地)。在这里,我想向 redis 添加新项目,但如果它在 db 上不存在,否则像通常的 Jpa 实现一样更新它。

这是我的模型:

@Getter
@Setter
@RedisHash("MyRecord")
public class MyRecordRedisModel {


    private String id;

    @Id
    @Indexed
    private String recordName;

    private Date startDate;
    private Date endDate;

}

而我的存储库类只是一个普通的 spring jpa 存储库,如下所示:

@Repository
public interface IFRecordRedisRepository extends JpaRepository<IFRecordRedisModel, String> {

    Page<IFRecordRedisModel> findAll(Pageable pageable);
}

唯一键必须是名称(我完全不关心 id 的唯一性)。因此,如果名称已经存在于 Db 中,则不要再次添加它。我将其标记为 Indexed,但它仍在添加相同的数据(具有相同的记录名称)。

我怎样才能让它独一无二?

【问题讨论】:

    标签: spring jpa redis spring-data-jpa spring-data-redis


    【解决方案1】:

    这需要额外的查询,但我认为此解决方案对您有用。您可以使用示例查询来检查是否存在具有该名称的记录,并有条件地保存,或者如果已经存在则执行其他操作。

    IFRecordRedisModel exampleRecord = new IFRecordRedisModel();
    exampleRecord.setRecordName(inputRecord.getRecordName());
    if (!repository.exists(Example.of(exampleModel))) 
        repository.save(inputRecord);
    else ..... // do something else
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 2017-11-23
      • 2014-04-13
      • 1970-01-01
      • 2014-11-10
      • 2018-01-09
      • 2014-04-09
      相关资源
      最近更新 更多