spring - Redis @Reference 在 Spring Data Redis 中不起作用

标签 spring redis jedis spring-data-redis

我在 Spring Boot + Spring Data Redis 中实现 @Reference 时遇到问题。 AddressEmployee 中的一个列表,当我保存 officehome 地址时,我希望数据能够与 Employee 一起保存。但数据未保存,因此无法使用 street 搜索 Address

员工.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("employees")
public class Employee {
    @Id @Indexed
    private String id;
    private String firstName;
    private String lastName;

    @Reference
    private List<Address> addresses;
} 

地址.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@RedisHash("address")
public class Address {
    @Id
    private String id;
    @Indexed
    private String street;
    private String city;
}

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class EmployeeAdressTest extends RepositoryTestSupport{
    @Autowired private EmployeeRepository employeeRepository;


    @Before
    public void setUp() throws JsonProcessingException {
        Address home = Address.builder().street("ABC Street").city("Pune").build();
        Address offc = Address.builder().street("XYZ Street").city("Pune").build();

        Employee employee1 = Employee.builder().firstName("Raj").lastName("Kumar").addresses(Arrays.asList(home, offc)).build();
        employeeRepository.save(employee1);


        List<Employee> employees = employeeRepository.findByAddresses_Street("XYZ Street");
        System.out.println("EMPLOYEE = "+employees);
    }

    @Test
    public void test() {

    }
}

Spring 文档:

8.8. Persisting References
Marking properties with @Reference allows storing a simple key reference instead of copying values into the hash itself. On loading from Redis, references are resolved automatically and mapped back into the object, as shown in the following example:

Example 30. Sample Property Reference
_class = org.example.Person
id = e2c7dcee-b8cd-4424-883e-736ce564363e
firstname = rand
lastname = al’thor
mother = people:a9d4b3a0-50d3-4538-a2fc-f7fc2581ee56      
Reference stores the whole key (keyspace:id) of the referenced object.

?

最佳答案

Spring Data Redis 要求您将存储在 homeoffice 中的对象与引用对象 employee1 分开保存。

这是(现在)在第 8.8 章末尾的官方文档中说明的:https://docs.spring.io/spring-data-redis/docs/current/reference/html/#redis.repositories.references

因此,如果您在保存 employee1 之前将 homeoffice 保存到数据库中,您应该没问题。

同样的顺便说一句适用于您稍后对引用对象所做的更新。仅保存引用对象并不会保存对引用对象的更新。

关于spring - Redis @Reference 在 Spring Data Redis 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53386600/

相关文章:

java - 迁移到 Spring Boot 2.0 后应用程序上下文监听器不起作用

java - 您可以为 Redis 集群(主/从)设置一个端点吗?

redis - 按顺序扫描redis排序集

Redis setbit 一次设置多个位

java - 使用 Jedis 在单个管道中进行多个 Redis 事务(多/执行)

java - 如何使用JAVA在Redis中进行批量插入?

java - SOAP 。代码忽略断开连接的客户端( java.net.SocketException : Broken pipe )

java - MultipartFile 问题,无法转换为文件

java - 带有 c3p0 的 spring JPA 在第一次请求时连接超时

php - 如何将 php 数组存储到 redis 并在 nodejs 中检索?