diff --git a/core/pom.xml b/core/pom.xml
index 28be229..852647c 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,7 +5,7 @@
com.cosium.spring.data
spring-data-jpa-entity-graph-parent
- 3.2.3-SNAPSHOT
+ 3.3-SNAPSHOT
Spring Data JPA EntityGraph
diff --git a/core/src/test/java/com/cosium/spring/data/jpa/entity/graph/repository/GeneratedEntityGraphTest.java b/core/src/test/java/com/cosium/spring/data/jpa/entity/graph/repository/GeneratedEntityGraphTest.java
index a3673d8..3f77576 100644
--- a/core/src/test/java/com/cosium/spring/data/jpa/entity/graph/repository/GeneratedEntityGraphTest.java
+++ b/core/src/test/java/com/cosium/spring/data/jpa/entity/graph/repository/GeneratedEntityGraphTest.java
@@ -44,6 +44,24 @@ void test() {
assertThat(Hibernate.isInitialized(product.getMaker().getCountry())).isTrue();
}
+ @Transactional
+ @Test
+ void test_() {
+ Product product =
+ productRepository
+ .findById(
+ 1L,
+ ProductEntityGraph.inic_(
+ productEG ->
+ productEG.brand_().category_().maker_(makerEG -> makerEG.country_())))
+ .orElseThrow(RuntimeException::new);
+
+ assertThat(Hibernate.isInitialized(product.getBrand())).isTrue();
+ assertThat(Hibernate.isInitialized(product.getCategory())).isTrue();
+ assertThat(Hibernate.isInitialized(product.getMaker())).isTrue();
+ assertThat(Hibernate.isInitialized(product.getMaker().getCountry())).isTrue();
+ }
+
@Test
@DisplayName("EntityGraph with embedded part is well generated")
void test2() {
diff --git a/generator/pom.xml b/generator/pom.xml
index 7560f73..874f2f7 100644
--- a/generator/pom.xml
+++ b/generator/pom.xml
@@ -5,7 +5,7 @@
com.cosium.spring.data
spring-data-jpa-entity-graph-parent
- 3.2.3-SNAPSHOT
+ 3.3-SNAPSHOT
Spring Data JPA EntityGraph Generator
diff --git a/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/EntityGraph.java b/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/EntityGraph.java
index 9af6294..5997fea 100644
--- a/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/EntityGraph.java
+++ b/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/EntityGraph.java
@@ -10,6 +10,7 @@
import java.io.IOException;
import java.util.Objects;
import java.util.Optional;
+import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.processing.Filer;
import javax.lang.model.element.Modifier;
@@ -64,6 +65,20 @@ public EntityGraph(
.addStatement("return new $N()", rootComposer.simpleName())
.build();
+ MethodSpec inicMethod =
+ MethodSpec.methodBuilder("inic_")
+ .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
+ .returns(Constants.ENTITY_GRAPH_CLASS_NAME)
+ .addParameter(
+ ParameterizedTypeName.get(
+ ClassName.get(Function.class), rootComposerClassName, rootComposerClassName),
+ "initializer")
+ .addStatement(
+ "return initializer.apply($N()).$N()",
+ Constants.PATH_SEPARATOR,
+ Constants.PATH_SEPARATOR)
+ .build();
+
MethodSpec rootStaticMethodWithEntityGraphType =
MethodSpec.methodBuilder(Constants.PATH_SEPARATOR)
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
@@ -96,6 +111,7 @@ public EntityGraph(
.addMethod(emptyConstructor)
.addMethod(constructor)
.addMethod(rootStaticMethod)
+ .addMethod(inicMethod)
.addMethod(rootStaticMethodWithEntityGraphType)
.addMethod(getEntityGraphTypeMethod)
.addType(rootComposer.toTypeSpec())
diff --git a/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/NodeComposer.java b/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/NodeComposer.java
index c7a7b5c..3216986 100644
--- a/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/NodeComposer.java
+++ b/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/NodeComposer.java
@@ -7,6 +7,7 @@
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeVariableName;
import java.util.List;
+import java.util.function.Function;
import javax.lang.model.element.Modifier;
import javax.lang.model.util.Elements;
@@ -88,6 +89,24 @@ private void addPathToEntity(Elements elements, MetamodelAttributeTarget target)
.addStatement("path.add($S)", target.attributeName())
.addStatement("return new $T($N, path)", targetNodeComposer, Constants.PATH_SEPARATOR)
.build());
+
+ typeSpecBuilder.addMethod(
+ MethodSpec.methodBuilder(target.attributeName() + "_")
+ .addModifiers(Modifier.PUBLIC)
+ .returns(rootType)
+ .addStatement("return this.$N().$N", target.attributeName(), Constants.PATH_SEPARATOR)
+ .build());
+
+ typeSpecBuilder.addMethod(
+ MethodSpec.methodBuilder(target.attributeName() + "_")
+ .addModifiers(Modifier.PUBLIC)
+ .returns(rootType)
+ .addParameter(
+ ParameterizedTypeName.get(
+ ClassName.get(Function.class), targetNodeComposer, rootType),
+ "initializer")
+ .addStatement("return initializer.apply(this.$N())", target.attributeName())
+ .build());
}
private void addPathToLeafComposer(MetamodelAttributeTarget target) {
diff --git a/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/RootComposer.java b/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/RootComposer.java
index b57e7be..1cf95e3 100644
--- a/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/RootComposer.java
+++ b/generator/src/main/java/com/cosium/spring/data/jpa/graph/generator/RootComposer.java
@@ -7,6 +7,7 @@
import com.squareup.javapoet.TypeSpec;
import java.util.ArrayList;
import java.util.List;
+import java.util.function.Function;
import javax.lang.model.element.Modifier;
import javax.lang.model.util.Elements;
@@ -113,6 +114,26 @@ private void addPathToEntity(Elements elements, MetamodelAttributeTarget target)
.addStatement("entityGraphAttributePaths.add(path)")
.addStatement("return new $T(this, path)", targetNodeComposer)
.build());
+
+ typeSpecBuilder.addMethod(
+ MethodSpec.methodBuilder(target.attributeName() + "_")
+ .addModifiers(Modifier.PUBLIC)
+ .returns(entityGraphClassName.nestedClass(SIMPLE_NAME))
+ .addStatement("return this.$N().$N", target.attributeName(), Constants.PATH_SEPARATOR)
+ .build());
+
+ typeSpecBuilder.addMethod(
+ MethodSpec.methodBuilder(target.attributeName() + "_")
+ .addModifiers(Modifier.PUBLIC)
+ .returns(entityGraphClassName.nestedClass(SIMPLE_NAME))
+ .addParameter(
+ ParameterizedTypeName.get(
+ ClassName.get(Function.class),
+ targetNodeComposer,
+ entityGraphClassName.nestedClass(SIMPLE_NAME)),
+ "initializer")
+ .addStatement("return initializer.apply(this.$N())", target.attributeName())
+ .build());
}
private void addPathToLeafComposer(MetamodelAttributeTarget target) {
diff --git a/pom.xml b/pom.xml
index cd715d8..6378d2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
com.cosium.spring.data
spring-data-jpa-entity-graph-parent
- 3.2.3-SNAPSHOT
+ 3.3-SNAPSHOT
pom