From 34247f9430d23fc773a4ac7c3e14c5dcd9f16972 Mon Sep 17 00:00:00 2001 From: yangseung-in Date: Thu, 21 Nov 2024 01:23:15 +0900 Subject: [PATCH 1/5] =?UTF-8?q?test:=20=EA=B2=80=EC=A6=9D=EB=B6=80=20?= =?UTF-8?q?=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/persistence/sql/entity/EntityPersisterTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/persistence/sql/entity/EntityPersisterTest.java b/src/test/java/persistence/sql/entity/EntityPersisterTest.java index ed67376e..daaf614e 100644 --- a/src/test/java/persistence/sql/entity/EntityPersisterTest.java +++ b/src/test/java/persistence/sql/entity/EntityPersisterTest.java @@ -86,10 +86,10 @@ void insert2() throws SQLException { List selectResult = jdbcTemplate.query(selectQuery, new EntityRowMapper<>(OrderItem.class)); assertThat(selectResult).hasSize(2); - assertThat(selectResult.get(0).getProduct()).isEqualTo(orderItem1.getProduct()); - assertThat(selectResult.get(0).getQuantity()).isEqualTo(orderItem1.getQuantity()); - assertThat(selectResult.get(1).getProduct()).isEqualTo(orderItem2.getProduct()); - assertThat(selectResult.get(1).getQuantity()).isEqualTo(orderItem2.getQuantity()); + assertThat(selectResult.get(0).getProduct()).isEqualTo("감자"); + assertThat(selectResult.get(0).getQuantity()).isEqualTo(3); + assertThat(selectResult.get(1).getProduct()).isEqualTo("고구마"); + assertThat(selectResult.get(1).getQuantity()).isEqualTo(1); jdbcTemplate.execute("drop table order_items"); jdbcTemplate.execute("drop table orders"); From 748d297bfc76717d605d8a337d13e7519391e792 Mon Sep 17 00:00:00 2001 From: yangseung-in Date: Thu, 21 Nov 2024 01:47:51 +0900 Subject: [PATCH 2/5] =?UTF-8?q?refactor:=20OneToManyColumn=EC=9D=84=20?= =?UTF-8?q?=EC=9E=AC=EC=83=9D=EC=84=B1=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/sql/dml/InsertQueryBuilder.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/persistence/sql/dml/InsertQueryBuilder.java b/src/main/java/persistence/sql/dml/InsertQueryBuilder.java index a577286c..9b7c3400 100644 --- a/src/main/java/persistence/sql/dml/InsertQueryBuilder.java +++ b/src/main/java/persistence/sql/dml/InsertQueryBuilder.java @@ -5,7 +5,6 @@ import persistence.sql.entity.EntityColumn; import persistence.sql.entity.EntityColumns; import persistence.sql.entity.EntityTable; -import persistence.sql.entity.OneToManyColumn; import java.lang.reflect.Field; import java.util.Arrays; @@ -30,12 +29,23 @@ private String columnsClause(EntityColumns entityColumns, Object parentEntity) { .collect(Collectors.toList()); if (parentEntity != null) { - OneToManyColumn oneToManyColumn = new OneToManyColumn(findOneToManyField(parentEntity.getClass())); - columns.add(oneToManyColumn.getForeignKeyColumnName()); + EntityColumn oneToManyColumn = getOneToManyColumnFromParentEntity(parentEntity); + if (oneToManyColumn != null) { + columns.add(oneToManyColumn.getOneToManyColumn().getForeignKeyColumnName()); + } } return String.join(", ", columns); } + private EntityColumn getOneToManyColumnFromParentEntity(Object parentEntity) { + for (Field field : parentEntity.getClass().getDeclaredFields()) { + if (field.isAnnotationPresent(OneToMany.class)) { + return EntityColumn.from(field); + } + } + + return null; + } private Field findOneToManyField(Class clazz) { return Arrays.stream(clazz.getDeclaredFields()) From 7fb405871144d1d6fe6762def6e048cddde49be6 Mon Sep 17 00:00:00 2001 From: yangseung-in Date: Thu, 21 Nov 2024 01:59:25 +0900 Subject: [PATCH 3/5] =?UTF-8?q?chore:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=EC=95=8A=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/persistence/sql/dml/InsertQueryBuilder.java | 7 ------- .../java/persistence/sql/entity/EntityColumns.java | 10 ---------- 2 files changed, 17 deletions(-) diff --git a/src/main/java/persistence/sql/dml/InsertQueryBuilder.java b/src/main/java/persistence/sql/dml/InsertQueryBuilder.java index 9b7c3400..a9278631 100644 --- a/src/main/java/persistence/sql/dml/InsertQueryBuilder.java +++ b/src/main/java/persistence/sql/dml/InsertQueryBuilder.java @@ -47,13 +47,6 @@ private EntityColumn getOneToManyColumnFromParentEntity(Object parentEntity) { return null; } - private Field findOneToManyField(Class clazz) { - return Arrays.stream(clazz.getDeclaredFields()) - .filter(field -> field.isAnnotationPresent(OneToMany.class)) - .findFirst() - .orElseThrow(() -> new RuntimeException("OneToMany 필드를 찾을 수 없습니다.")); - } - private String valueClause(EntityColumns entityColumns, Object object, Long parentId) { List values = entityColumns.getColumns().stream() .filter(column -> !column.isGeneratedValue()) diff --git a/src/main/java/persistence/sql/entity/EntityColumns.java b/src/main/java/persistence/sql/entity/EntityColumns.java index 7537a6dc..ec64c093 100644 --- a/src/main/java/persistence/sql/entity/EntityColumns.java +++ b/src/main/java/persistence/sql/entity/EntityColumns.java @@ -1,7 +1,5 @@ package persistence.sql.entity; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; import jakarta.persistence.Transient; import java.lang.reflect.Field; @@ -27,14 +25,6 @@ public List getColumns() { return columns; } - public EntityColumn getEntityColumn(Field field) { - return columns.stream() - .filter(entityColumn -> entityColumn.getColumnName().equals(field.getName())) - .findFirst() - .orElse(null); - } - - public String getIdFieldName() { for (EntityColumn column : columns) { if (column.isPrimaryKey()) { From 55fc069aec2d9cf7c5c1d5b7eb1ee12c42cca510 Mon Sep 17 00:00:00 2001 From: yangseung-in Date: Thu, 21 Nov 2024 02:03:38 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20=EB=8B=A4=EC=88=98=EC=9D=98=20O?= =?UTF-8?q?neToMany=EB=A5=BC=20=EC=B2=98=EB=A6=AC=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/sql/dml/InsertQueryBuilder.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/persistence/sql/dml/InsertQueryBuilder.java b/src/main/java/persistence/sql/dml/InsertQueryBuilder.java index a9278631..93221f7f 100644 --- a/src/main/java/persistence/sql/dml/InsertQueryBuilder.java +++ b/src/main/java/persistence/sql/dml/InsertQueryBuilder.java @@ -29,22 +29,20 @@ private String columnsClause(EntityColumns entityColumns, Object parentEntity) { .collect(Collectors.toList()); if (parentEntity != null) { - EntityColumn oneToManyColumn = getOneToManyColumnFromParentEntity(parentEntity); - if (oneToManyColumn != null) { + List oneToManyFields = findOneToManyFields(parentEntity.getClass()); + for (Field oneToManyField : oneToManyFields) { + EntityColumn oneToManyColumn = EntityColumn.from(oneToManyField); columns.add(oneToManyColumn.getOneToManyColumn().getForeignKeyColumnName()); } } return String.join(", ", columns); } - private EntityColumn getOneToManyColumnFromParentEntity(Object parentEntity) { - for (Field field : parentEntity.getClass().getDeclaredFields()) { - if (field.isAnnotationPresent(OneToMany.class)) { - return EntityColumn.from(field); - } - } - return null; + private List findOneToManyFields(Class clazz) { + return Arrays.stream(clazz.getDeclaredFields()) + .filter(field -> field.isAnnotationPresent(OneToMany.class)) + .collect(Collectors.toList()); } private String valueClause(EntityColumns entityColumns, Object object, Long parentId) { From 6f7997d8b13253272bbeae5546d852746be8bc7a Mon Sep 17 00:00:00 2001 From: yangseung-in Date: Fri, 22 Nov 2024 01:12:17 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20joinEntityclass=EB=A5=BC=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=EB=A1=9C=20=EC=A0=80=EC=9E=A5=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/persistence/sql/entity/OneToManyColumn.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/persistence/sql/entity/OneToManyColumn.java b/src/main/java/persistence/sql/entity/OneToManyColumn.java index 7d8db8af..ca49685a 100644 --- a/src/main/java/persistence/sql/entity/OneToManyColumn.java +++ b/src/main/java/persistence/sql/entity/OneToManyColumn.java @@ -7,13 +7,15 @@ public class OneToManyColumn { private final Field field; + private Class joinEntityClass; public OneToManyColumn(Field field) { this.field = field; + this.joinEntityClass = (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; } public Class getJoinEntityClass() { - return (Class) ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; + return joinEntityClass; } public String getForeignKeyColumnName() {