11package com .example ;
22
3+ import com .example .model .Base ;
34import com .example .model .Pizza ;
5+ import com .example .model .Topping ;
46import com .example .querydsl .QBase ;
57import com .example .querydsl .QPizza ;
68import com .example .querydsl .QPizzaToppings ;
79import com .example .querydsl .QTopping ;
810import com .querydsl .core .Tuple ;
911import com .querydsl .sql .SQLQueryFactory ;
1012import com .querydsl .sql .dml .SQLInsertClause ;
13+ import org .slf4j .Logger ;
14+ import org .slf4j .LoggerFactory ;
1115import org .springframework .beans .factory .annotation .Autowired ;
1216import org .springframework .stereotype .Repository ;
1317import org .springframework .transaction .annotation .Transactional ;
1418
19+ import java .util .ArrayList ;
1520import java .util .Collections ;
1621import java .util .List ;
1722import java .util .stream .Collectors ;
@@ -29,28 +34,6 @@ public class PizzaRepository {
2934 private final QTopping qTopping = QTopping .topping ;
3035
3136 public List <Pizza > findOrderByIdAsc () {
32- // List<Result<Record>> values = dslContext.selectDistinct()
33- // .from(PIZZA)
34- // .innerJoin(BASE).on(BASE.ID.eq(PIZZA.BASE_ID))
35- // .innerJoin(PIZZA_TOPPINGS).on(PIZZA_TOPPINGS.PIZZA_ID.eq(PIZZA.ID))
36- // .innerJoin(TOPPING).on(TOPPING.ID.eq(PIZZA_TOPPINGS.TOPPINGS_ID))
37- // .orderBy(PIZZA.ID.asc())
38- // .fetch()
39- // .intoGroups(PIZZA.fields())
40- // .values()
41- // .stream()
42- // .collect(Collectors.toList());
43- // if (values.isEmpty()) {
44- // return Collections.emptyList();
45- // }
46- // return values.stream()
47- // .map(r -> {
48- // Pizza pizza = r.into(PIZZA.ID, PIZZA.NAME, PIZZA.PRICE).get(0).into(Pizza.class);
49- // pizza.setBase(r.into(BASE.ID, BASE.NAME).get(0).into(Base.class));
50- // pizza.setToppings(r.sortAsc(TOPPING.ID).into(Topping.class));
51- // return pizza;
52- // })
53- // .collect(Collectors.toList());
5437 List <Tuple > values = sqlQueryFactory
5538 .select (qPizza .id , qPizza .name , qPizza .price , qBase .id , qBase .name , qTopping .id , qTopping .name )
5639 .from (qPizza )
@@ -64,15 +47,27 @@ public List<Pizza> findOrderByIdAsc() {
6447 if (values .isEmpty ()) {
6548 return Collections .emptyList ();
6649 }
67- return values .stream ()
68- .map (tuple -> {
69- Pizza pizza = new Pizza ();
70- pizza .setId (tuple .get (qPizza .id ));
71- pizza .setName (tuple .get (qPizza .name ));
72- pizza .setPrice (tuple .get (qPizza .price ));
73- return pizza ;
74- })
75- .collect (Collectors .toList ());
50+ List <Pizza > pizzas = new ArrayList <>();
51+ Pizza pizza = null ;
52+ for (Tuple tuple : values ) {
53+ Long pizzaId = tuple .get (qPizza .id );
54+ if (pizza == null || !pizza .getId ().equals (pizzaId )) {
55+ pizza = new Pizza ();
56+ pizza .setId (pizzaId );
57+ pizza .setName (tuple .get (qPizza .name ));
58+ pizza .setPrice (tuple .get (qPizza .price ));
59+ Base base = new Base (tuple .get (qBase .id ));
60+ base .setId (tuple .get (qBase .id ));
61+ base .setName (tuple .get (qBase .name ));
62+ pizza .setBase (base );
63+ pizza .setToppings (new ArrayList <>());
64+ pizzas .add (pizza );
65+ }
66+ Topping topping = new Topping (tuple .get (qTopping .id ));
67+ topping .setName (tuple .get (qTopping .name ));
68+ pizza .getToppings ().add (topping );
69+ }
70+ return pizzas ;
7671 }
7772
7873 public Pizza save (Pizza pizza ) {
0 commit comments