我在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);
答案 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。