Description
John Blum opened DATAGEODE-262 and commented
This improvement will track the development of Repository
query method projections.
Typically, SD [Geode] Repositories
are tied to a single application domain object type. However, query methods, whether by convention or annotated with @Query
, can return a custom type containing a subset of the properties from the actual domain object itself (the "projection").
For example, I may have defined a Customer
like so...
@Region("Contacts")
class Contact {
Address address;
Customer customer;
PhoneNumber phoneNumber;
String email;
...
}
Any one of the composed types (e.g. Customer
) can be arbitrarily complex. Currently, the corresponding [CRUD] Repository
might look like the following containing a query to find all Contacts in a particular city/state.
interface ContactRepository extends CrudRepository<Customer, Long> {
List<Contact> findByAddressCityAndAddressState(State state, String city);
}
Depending on the application view, the user may only want a subset of the data returned from the query to project into the view. In other words, rather than returning the entire Contact
, the user may want to only find all Customers
by first and last name with phone number in a given city/state.
For example...
<code:java}
interface ContactRepository extends CrudRepository<Customer, Long> {
List<CustomerView> findByAddressCityAndAddressState(State state, String city);
}
With the corresponding, given `CustomerView`...
```java
class CustomerView {
PhoneNumber phoneNumber;
String accountNumber;
String firstName;
String lastName;
}
Repository
query projection support effectively allows the user to redefine their query method with the data of interests.
Reference URL: https://jira.spring.io/browse/SGF-523