diff --git a/pom.xml b/pom.xml
index d134ce3..5fc1000 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,17 @@
org.springframework.boot
spring-boot-starter-thymeleaf
+
+
+ com.querydsl
+ querydsl-apt
+ provided
+
+
+
+ com.querydsl
+ querydsl-jpa
+
@@ -70,6 +81,23 @@
+
+
+ com.mysema.maven
+ apt-maven-plugin
+ 1.1.3
+
+
+
+ process
+
+
+ target/generated-sources/java
+ com.querydsl.apt.jpa.JPAAnnotationProcessor
+
+
+
+
diff --git a/src/main/java/com/security/basic/configure/JpaConfiguration.java b/src/main/java/com/security/basic/configure/JpaConfiguration.java
new file mode 100644
index 0000000..a1bd5fb
--- /dev/null
+++ b/src/main/java/com/security/basic/configure/JpaConfiguration.java
@@ -0,0 +1,21 @@
+package com.security.basic.configure;
+
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+
+@Configuration
+@EnableJpaAuditing
+public class JpaConfiguration {
+
+ @PersistenceContext
+ private EntityManager em;
+
+ @Bean
+ public JPAQueryFactory jpaQueryFactory () {
+ return new JPAQueryFactory(em);
+ }
+}
diff --git a/src/main/java/com/security/basic/mapped/BaseItem.java b/src/main/java/com/security/basic/mapped/BaseItem.java
new file mode 100644
index 0000000..0120adc
--- /dev/null
+++ b/src/main/java/com/security/basic/mapped/BaseItem.java
@@ -0,0 +1,15 @@
+package com.security.basic.mapped;
+
+import javax.persistence.*;
+
+@MappedSuperclass
+public abstract class BaseItem {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id", nullable = false)
+ private Long id;
+
+ @Column(name = "name", nullable = false)
+ private String name;
+}
diff --git a/src/main/java/com/security/basic/mapped/BaseItemRepository.java b/src/main/java/com/security/basic/mapped/BaseItemRepository.java
new file mode 100644
index 0000000..118f4db
--- /dev/null
+++ b/src/main/java/com/security/basic/mapped/BaseItemRepository.java
@@ -0,0 +1,36 @@
+package com.security.basic.mapped;
+
+import com.querydsl.core.types.Projections;
+import com.querydsl.jpa.impl.JPAQueryFactory;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@RequiredArgsConstructor
+@Repository
+public class BaseItemRepository {
+
+ private final JPAQueryFactory queryFactory;
+
+ com.security.basic.mapped.QBaseItem qItemA = com.security.basic.mapped.QItemA.itemA._super;
+ com.security.basic.mapped.QBaseItem qItemB = com.security.basic.mapped.QItemB.itemB._super;
+
+ public List itemAList() {
+ return queryFactory.select(Projections.constructor(ItemDto.class,
+ qItemA.id,
+ qItemA.name
+ ))
+ .from(qItemA)
+ .fetch();
+ }
+
+ public List itemBList() {
+ return queryFactory.select(Projections.constructor(ItemDto.class,
+ qItemB.id,
+ qItemB.name
+ ))
+ .from(qItemB)
+ .fetch();
+ }
+}
diff --git a/src/main/java/com/security/basic/mapped/Controller.java b/src/main/java/com/security/basic/mapped/Controller.java
new file mode 100644
index 0000000..554e9d0
--- /dev/null
+++ b/src/main/java/com/security/basic/mapped/Controller.java
@@ -0,0 +1,25 @@
+package com.security.basic.mapped;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/mapped")
+public class Controller {
+
+ private final BaseItemRepository baseItemRepository;
+
+ @GetMapping("/a")
+ public ResponseEntity> a() {
+ return ResponseEntity.ok(baseItemRepository.itemAList());
+ }
+
+ @GetMapping("/b")
+ public ResponseEntity> b() {
+ return ResponseEntity.ok(baseItemRepository.itemBList());
+ }
+}
diff --git a/src/main/java/com/security/basic/mapped/ItemA.java b/src/main/java/com/security/basic/mapped/ItemA.java
new file mode 100644
index 0000000..df2e243
--- /dev/null
+++ b/src/main/java/com/security/basic/mapped/ItemA.java
@@ -0,0 +1,8 @@
+package com.security.basic.mapped;
+
+import javax.persistence.Entity;
+
+@Entity
+public class ItemA extends BaseItem{
+
+}
diff --git a/src/main/java/com/security/basic/mapped/ItemB.java b/src/main/java/com/security/basic/mapped/ItemB.java
new file mode 100644
index 0000000..6bef1a1
--- /dev/null
+++ b/src/main/java/com/security/basic/mapped/ItemB.java
@@ -0,0 +1,10 @@
+package com.security.basic.mapped;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Table(name = "item_a")
+@Entity
+public class ItemB extends BaseItem{
+
+}
diff --git a/src/main/java/com/security/basic/mapped/ItemDto.java b/src/main/java/com/security/basic/mapped/ItemDto.java
new file mode 100644
index 0000000..2422bda
--- /dev/null
+++ b/src/main/java/com/security/basic/mapped/ItemDto.java
@@ -0,0 +1,14 @@
+package com.security.basic.mapped;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class ItemDto {
+
+ private Long id;
+ private String name;
+}