Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1fd3741

Browse files
Daniel Gulyasreda-alaoui
Daniel Gulyas
authored andcommitted
Add fromAttributePaths helper method to EntityGraphUtils
1 parent 8c91188 commit 1fd3741

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

‎README.md‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,18 @@ productRepository.findOne(1L, EntityGraphUtils.fromName("Product.brand"));
9393

9494
Or any method you like.
9595

96-
You can also pass a dynamically built EntityGraph by using `DynamicEntityGraph` implementation.
96+
You can also pass a dynamically built EntityGraph by using `DynamicEntityGraph`, it's also accessible through a helper method:
97+
98+
```java
99+
productRepository.findOne(1L, EntityGraphUtils.fromAttributePaths("brand", "maker"));
100+
```
101+
102+
This is similar to [Spring's ad-hoc attribute paths](http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions),
103+
and equivalent to writing this in your repository's interface:
104+
```java
105+
@EntityGraph(attributePaths = { "brand", "maker" })
106+
Product findOne(Long id);
107+
```
97108

98109
## Default EntityGraph
99110

‎src/main/java/com/cosium/spring/data/jpa/entity/graph/domain/EntityGraphUtils.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.cosium.spring.data.jpa.entity.graph.domain;
22

3+
import com.mysema.commons.lang.Assert;
4+
5+
import java.util.Arrays;
36
import java.util.List;
47

58
/**
@@ -38,6 +41,15 @@ public static EntityGraph fromName(String name, boolean optional){
3841
return namedEntityGraph;
3942
}
4043

44+
/**
45+
* @param attributePaths The attribute paths to be present in the result
46+
* @return A {@link DynamicEntityGraph} with the path attributes passed in as arguments.
47+
*/
48+
public static EntityGraph fromAttributePaths(String... attributePaths) {
49+
Assert.notEmpty(attributePaths, "At least one attribute path is required.");
50+
return new DynamicEntityGraph(Arrays.asList(attributePaths));
51+
}
52+
4153
private static final class EmptyEntityGraph implements EntityGraph {
4254

4355
@Override

‎src/test/java/com/cosium/spring/data/jpa/entity/graph/repository/JpaEntityGraphRepositoryTest.java‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.List;
1212

1313
import com.cosium.spring.data.jpa.entity.graph.BaseTest;
14+
import com.cosium.spring.data.jpa.entity.graph.domain.EntityGraph;
1415
import com.cosium.spring.data.jpa.entity.graph.domain.EntityGraphUtils;
1516
import com.cosium.spring.data.jpa.entity.graph.repository.exception.InapplicableEntityGraphException;
1617
import com.cosium.spring.data.jpa.entity.graph.repository.sample.*;
@@ -68,6 +69,25 @@ public void given_optional_brand_eg_when_findone_then_brand_should_be_loaded(){
6869
assertThat(Hibernate.isInitialized(product.getBrand())).isTrue();
6970
}
7071

72+
@Transactional
73+
@Test
74+
public void given_brand_in_attribute_paths_eg_when_findone_then_brand_should_be_loaded() {
75+
Product product = productRepository.findOne(1L, EntityGraphUtils.fromAttributePaths(Product.BRAND_PROP_NAME));
76+
assertThat(product).isNotNull();
77+
assertThat(Hibernate.isInitialized(product.getBrand())).isTrue();
78+
}
79+
80+
@Transactional
81+
@Test
82+
public void given_brand_and_maker_in_attribute_paths_eg_when_findone_then_brand_and_maker_should_be_loaded() {
83+
EntityGraph entityGraph = EntityGraphUtils.fromAttributePaths(Product.BRAND_PROP_NAME, Product.MAKER_PROP_NAME);
84+
Product product = productRepository.findOne(1L, entityGraph);
85+
86+
assertThat(product).isNotNull();
87+
assertThat(Hibernate.isInitialized(product.getBrand())).isTrue();
88+
assertThat(Hibernate.isInitialized(product.getMaker())).isTrue();
89+
}
90+
7191
@Transactional
7292
@Test
7393
public void given_brand_eg_when_findByName_then_brand_should_be_loaded(){

‎src/test/java/com/cosium/spring/data/jpa/entity/graph/repository/sample/Product.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ public class Product {
2121
public static final String DEFAULT_EG = "Product.default";
2222
public static final String BRAND_EG = "Product.brand";
2323

24+
public static final String BRAND_PROP_NAME = "brand";
25+
public static final String MAKER_PROP_NAME = "maker";
26+
2427
@Id
2528
@GeneratedValue(strategy = GenerationType.IDENTITY)
2629
@Access(value = AccessType.PROPERTY)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /