From 12368a2c7285d658a391a3644ce3dee9ff5b0fbe Mon Sep 17 00:00:00 2001 From: Toshihiro Nakamura Date: Sun, 15 Jun 2025 11:28:25 +0900 Subject: [PATCH] Add manager relationship to Employee aggregate strategy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added manager association linker to EmployeeAggregateStrategy - Updated SQL query to include left join for manager relationship - Enhanced test to verify manager association loading - Updated code generation to include manager relationship 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- build.gradle.kts | 15 +++++++++++++++ .../com/example/EmployeeAggregateStrategy.java | 3 +++ .../com/example/EmployeeDao/selectById.sql | 2 ++ src/test/java/com/example/EmployeeDaoTest.java | 10 ++++++++++ 4 files changed, 30 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 7026cb6..342acaf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -194,6 +194,9 @@ fun writeEmployeeAggregateStrategyCode( @AggregateStrategy(root = Employee$i.class, tableAlias = "e") public interface Employee${i}AggregateStrategy { + + @AssociationLinker(propertyPath = "manager", tableAlias = "m") + BiConsumer manager = (e, m) -> e.manager = m; @AssociationLinker(propertyPath = "department", tableAlias = "d") BiConsumer department = @@ -300,6 +303,8 @@ fun writeSelectByIdSqlFile( """ SELECT /*%expand*/* FROM employee$i e + LEFT JOIN employee$i m + ON e.manager_id = m.id INNER JOIN department$i d ON e.department_id = d.id WHERE e.id = /*id*/0 @@ -445,8 +450,18 @@ fun writeEmployeeDaoTestCode( assertNotNull(employee); assertNotNull(employee.name); assertNotNull(employee.department); + assertNull(employee.manager); assertEquals("John Smith", employee.name.value()); assertEquals("Engineering", employee.department.name.value()); + + var employee2 = employeeDao.selectById(2L); + assertNotNull(employee2); + assertNotNull(employee2.name); + assertNotNull(employee2.department); + assertNotNull(employee2.manager); + assertEquals("Sarah Johnson", employee2.name.value()); + assertEquals("Engineering", employee2.department.name.value()); + assertEquals(employee.id, employee2.manager.id); } } """.trimIndent(), diff --git a/src/main/java/com/example/EmployeeAggregateStrategy.java b/src/main/java/com/example/EmployeeAggregateStrategy.java index 44d79ff..b8728e6 100644 --- a/src/main/java/com/example/EmployeeAggregateStrategy.java +++ b/src/main/java/com/example/EmployeeAggregateStrategy.java @@ -7,6 +7,9 @@ @AggregateStrategy(root = Employee.class, tableAlias = "e") public interface EmployeeAggregateStrategy { + @AssociationLinker(propertyPath = "manager", tableAlias = "m") + BiConsumer manager = (e, m) -> e.manager = m; + @AssociationLinker(propertyPath = "department", tableAlias = "d") BiConsumer department = (e, d) -> { diff --git a/src/main/resources/META-INF/com/example/EmployeeDao/selectById.sql b/src/main/resources/META-INF/com/example/EmployeeDao/selectById.sql index 1e030aa..4f1448a 100644 --- a/src/main/resources/META-INF/com/example/EmployeeDao/selectById.sql +++ b/src/main/resources/META-INF/com/example/EmployeeDao/selectById.sql @@ -1,5 +1,7 @@ SELECT /*%expand*/* FROM employee e + LEFT JOIN employee m + ON e.manager_id = m.id INNER JOIN department d ON e.department_id = d.id WHERE e.id = /*id*/0 diff --git a/src/test/java/com/example/EmployeeDaoTest.java b/src/test/java/com/example/EmployeeDaoTest.java index 34be503..f5f9028 100644 --- a/src/test/java/com/example/EmployeeDaoTest.java +++ b/src/test/java/com/example/EmployeeDaoTest.java @@ -56,7 +56,17 @@ void selectById() { assertNotNull(employee); assertNotNull(employee.name); assertNotNull(employee.department); + assertNull(employee.manager); assertEquals("John Smith", employee.name.value()); assertEquals("Engineering", employee.department.name.value()); + + var employee2 = employeeDao.selectById(2L); + assertNotNull(employee2); + assertNotNull(employee2.name); + assertNotNull(employee2.department); + assertNotNull(employee2.manager); + assertEquals("Sarah Johnson", employee2.name.value()); + assertEquals("Engineering", employee2.department.name.value()); + assertEquals(employee.id, employee2.manager.id); } }