JPA通过限制收集查找

时间:2014-07-18 07:47:42

标签: spring jpa spring-data-jpa

我在Spring JPA存储库界面中使用spring hibernate。

在我的模型中,我已经建立了一个经典的双向一对一,多对一个用于客户和地址。该地址有一个名为" customer"它包含客户对象,客户在名为addressBook的字段中有一组地址。

//from Address Class

 @ManyToOne
private Customer customer;

// from Customer class

@OneToMany(fetch = FetchType.EAGER, mappedBy = "customer")
private List<Address> addressBook;

注意我此刻只是急切的抓取,因为它没有使用Lazy抓取......

我希望能够从存储库中通过客户检索地址。我如何在代码中执行此操作?像这样:

 Customer customer = customerRepository.findOne(customerId);

    Address address = customer.getAddressBook().findOne(addressId);
    // or maybe
    Address address = addressRepository.findByCustomerAndId(customer, addressId);

2 个答案:

答案 0 :(得分:0)

我会在Customer类上提供一个findAddress方法:

public Address findAddress(Long addressId) {
    if(addressId == null) {
        return null;
    }
    Address matchingAddress = null;
    for(Address address : this.addressBook) {
        if(addressId.equals(address.getId()) {
            matchingAddress = address;
            break;
        }
    }
    return matchingAddress;
}

答案 1 :(得分:0)

实际上最后一个应该有效:

 Address address = addressRepository.findByCustomerAndId(customer, addressId);

如果您在创建存储库方法时遇到困难,可以阅读Spring Data JPA文档。特别是this table非常有帮助。如果您需要在嵌套实体属性​​上创建查询,您可以执行此操作,并且描述为here