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

时间:2018-11-20 05:11:54

标签: spring redis jedis spring-data-redis

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

Employee.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;
} 

Address.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() {

    }
}

春季文档:

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.

1 个答案:

答案 0 :(得分:0)

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

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

因此,如果在保存home之前将officeemployee1保存到数据库中,就可以了。

同一btw对以后对引用对象进行的更新有效。仅保存引用对象并不能保存引用对象的更新。