From d9dc12f427232e4c8f3bdd1870e507f22d0a2383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=AF=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=B2?= Date: Mon, 15 Apr 2024 17:50:42 +0400 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20FetchType.EAGE?= =?UTF-8?q?R=20game,=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D1=81=D1=8F=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.mv.db | Bin 65536 -> 40960 bytes data.trace.db | 58 ------------- .../com/example/demo/DemoApplication.java | 6 +- .../example/demo/games/model/GameEntity.java | 5 +- .../demo/games/repository/GameRepository.java | 30 ++++++- .../demo/games/service/GameService.java | 2 +- .../demo/orders/model/OrderEntity.java | 2 +- .../com/example/demo/TypeServiceTests.java | 76 ++++++++++++++++++ 8 files changed, 112 insertions(+), 67 deletions(-) delete mode 100644 data.trace.db create mode 100644 src/test/java/com/example/demo/TypeServiceTests.java diff --git a/data.mv.db b/data.mv.db index b332ce5ffe118b3b068ba1bc79648cc394277cc4..cb1368a7a8a884f373f3b9f5d4a696974b50eb5c 100644 GIT binary patch literal 40960 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 literal 65536 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.java:125) - at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:288) - at org.h2.server.web.WebServer.getConnection(WebServer.java:811) - at org.h2.server.web.WebApp.login(WebApp.java:1039) - at org.h2.server.web.WebApp.process(WebApp.java:227) - at org.h2.server.web.WebApp.processRequest(WebApp.java:177) - at org.h2.server.web.JakartaWebServlet.doGet(JakartaWebServlet.java:129) - at org.h2.server.web.JakartaWebServlet.doPost(JakartaWebServlet.java:166) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1623) -Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Неверное имя пользователя или пароль -Wrong user name or password [28000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:522) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 50 more diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index fee4a37..cfdbe10 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -61,15 +61,15 @@ public class DemoApplication implements CommandLineRunner { genres2.add(genre2); final var game1 = gameService.create(new GameEntity(type1,"Game1",2100.0,"good game", genres1)); - // final var game2 = gameService.create(new GameEntity( type2, "Game2", 1200.0,"bad game", genres1)); + final var game2 = gameService.create(new GameEntity( type2, "Game2", 1200.0,"bad game", genres2)); final List games = new ArrayList(); games.add(game1); - // games.add(game2); + games.add(game2); var user1 = userService.create(new UserEntity( "login1", "email@mail.com", "qwerty123")); // var user2 = userService.create(new UserEntity( "login2", "email@gmail.com", "qwerty1234")); - orderService.create(6, new OrderEntity(user1,games)); + orderService.create(7, new OrderEntity(user1,games)); // orderService.create(1, new OrderEntity(user1,games)); } } diff --git a/src/main/java/com/example/demo/games/model/GameEntity.java b/src/main/java/com/example/demo/games/model/GameEntity.java index 6051f40..ff75593 100644 --- a/src/main/java/com/example/demo/games/model/GameEntity.java +++ b/src/main/java/com/example/demo/games/model/GameEntity.java @@ -10,9 +10,8 @@ import com.example.demo.types.model.TypeEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; +import jakarta.persistence.ManyToMany; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; @@ -25,7 +24,7 @@ public class GameEntity extends BaseEntity{ private Double price; @Column(nullable = false) private String description; - @OneToMany(fetch=FetchType.EAGER) + @ManyToMany() @Column(unique = false) private final List genres = new ArrayList<>(); @OneToOne diff --git a/src/main/java/com/example/demo/games/repository/GameRepository.java b/src/main/java/com/example/demo/games/repository/GameRepository.java index 51d9e84..ffbd8c0 100644 --- a/src/main/java/com/example/demo/games/repository/GameRepository.java +++ b/src/main/java/com/example/demo/games/repository/GameRepository.java @@ -4,6 +4,7 @@ import java.util.Optional; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; @@ -14,5 +15,32 @@ public interface GameRepository extends CrudRepository, Paging Optional findOneById(long id); Page findByTypeIdAndGenres(long typeId, GenreEntity genre, Pageable pageable); Page findByTypeId(long typeId, Pageable pageable); - Page findByGenres(GenreEntity genre, Pageable pageable); + //Page findByGenres(GenreEntity genre, Pageable pageable); + + @Query("select distinct g from GameEntity g join fetch g.genres ge where ge.id = ?1") + Page findByGenres(long genre, Pageable pageable); } + +/* "select " ++ "ga.id, ga.description, ga.name, ga.price, ga.type_id " ++ "from games ga left join fetch games_genres g on ga.id = g.game_entity_id " ++ "where g.id = ?1 " ++ "order by ga.id"*/ + +//select ge1_0.id,ge1_0.name from genres ge1_0 where ge1_0.id=? + +//select ge1_0.id,ge1_0.description,ge1_0.name,ge1_0.price,ge1_0.type_id +//from games ge1_0 left join games_genres g1_0 on ge1_0.id=g1_0.game_entity_id +//where g1_0.genres_id=? offset ? rows fetch first ? rows only + +//select te1_0.id,te1_0.name from types te1_0 where te1_0.id=? + +//select g1_0.game_entity_id,g1_1.id,g1_1.name from games_genres g1_0 join genres g1_1 on g1_1.id=g1_0.genres_id where g1_0.game_entity_id=? + +// @Query("select " +// + "t as type, " +// + "coalesce(sum(o.price), 0) as totalPrice, " +// + "coalesce(sum(o.count), 0) as totalCount " +// + "from TypeEntity t left join OrderEntity o on o.type = t and o.user.id = ?1 " +// + "group by t order by t.id") +// List getOrdersTotalByType(long userId); diff --git a/src/main/java/com/example/demo/games/service/GameService.java b/src/main/java/com/example/demo/games/service/GameService.java index b8d92f8..22974df 100644 --- a/src/main/java/com/example/demo/games/service/GameService.java +++ b/src/main/java/com/example/demo/games/service/GameService.java @@ -53,7 +53,7 @@ public class GameService { return repository.findByTypeIdAndGenres(typeId, NeedGenre, pageRequest); } if(Objects.equals(typeId, 0L) && !Objects.equals(genre, 0L)){ - return repository.findByGenres(NeedGenre, pageRequest); + return repository.findByGenres(genre, pageRequest); } if(!Objects.equals(typeId, 0L) && Objects.equals(genre, 0L)){ return repository.findByTypeId(typeId, pageRequest); diff --git a/src/main/java/com/example/demo/orders/model/OrderEntity.java b/src/main/java/com/example/demo/orders/model/OrderEntity.java index dde8f40..4612ee8 100644 --- a/src/main/java/com/example/demo/orders/model/OrderEntity.java +++ b/src/main/java/com/example/demo/orders/model/OrderEntity.java @@ -25,7 +25,7 @@ public class OrderEntity extends BaseEntity{ @ManyToOne @JoinColumn(name = "userId", nullable = false) private UserEntity user; - @OneToMany(fetch=FetchType.EAGER) + @OneToMany(fetch=FetchType.EAGER) //cделать запрос jpa private Set games = new HashSet<>(); public OrderEntity(){ diff --git a/src/test/java/com/example/demo/TypeServiceTests.java b/src/test/java/com/example/demo/TypeServiceTests.java new file mode 100644 index 0000000..4e72ded --- /dev/null +++ b/src/test/java/com/example/demo/TypeServiceTests.java @@ -0,0 +1,76 @@ +// package com.example.demo; + +// import org.junit.jupiter.api.AfterEach; +// import org.junit.jupiter.api.Assertions; +// import org.junit.jupiter.api.BeforeEach; +// import org.junit.jupiter.api.Order; +// import org.junit.jupiter.api.Test; +// import org.junit.jupiter.api.TestMethodOrder; +// import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +// import org.springframework.beans.factory.annotation.Autowired; +// import org.springframework.boot.test.context.SpringBootTest; + +// import com.example.demo.core.error.NotFoundException; +// import com.example.demo.types.model.TypeEntity; +// import com.example.demo.types.service.TypeService; + +// @SpringBootTest +// @TestMethodOrder(OrderAnnotation.class) +// class TypeServiceTests { +// @Autowired +// private TypeService typeService; + +// private TypeEntity type; + +// @BeforeEach +// void createData() { +// removeData(); + +// type = typeService.create(new TypeEntity("Ноутбук")); +// typeService.create(new TypeEntity("Телефон")); +// typeService.create(new TypeEntity("Игровая приставка")); +// } + +// @AfterEach +// void removeData() { +// typeService.getAll().forEach(item -> typeService.delete(item.getId())); +// } + +// @Test +// void getTest(){ +// Assertions.assertThrows(NotFoundException.class, () -> typeService.get(0L)); +// } + +// @Test +// @Order(1) +// void createTest(){ +// typeService.create(new TypeEntity("Игра")); +// typeService.create(new TypeEntity("Программа")); +// final TypeEntity last = typeService.create(new TypeEntity("Игра2")); +// Assertions.assertEquals(5, typeService.getAll().size()); +// Assertions.assertEquals(last, typeService.get(10L)); +// } + +// @Test +// @Order(2) +// void updateTest(){ +// final String test = "TEST"; +// final TypeEntity newEntity = typeService.update(9L, new TypeEntity(test)); +// Assertions.assertEquals(5, typeService.getAll().size()); +// Assertions.assertEquals(newEntity, typeService.get(9L)); +// Assertions.assertEquals(test, newEntity.getName()); +// } + +// @Test +// @Order(3) +// void deleteTest(){ +// typeService.delete(9L); +// Assertions.assertEquals(8, typeService.getAll().size()); +// final TypeEntity last = typeService.get(8L); +// Assertions.assertEquals(8L, last.getId()); + +// final TypeEntity newEntity = typeService.create(new TypeEntity("Игра")); +// Assertions.assertEquals(9, typeService.getAll().size()); +// Assertions.assertEquals(11L, newEntity.getId()); +// } +// }