오늘은 like 순으로 페이징을 하는 기능을 끝내고 제목의 키워드를 검색하는 기능, 그리고 키워드를 통해 검색한 횟수를 검색 히스토리라고 따로 테이블을 만들어서 거기에 저장한뒤 그걸 통해 인기 검색어를 볼수 있도록 하는 기능을 구현해야 한다. 그리고 이건 그 와중에 발생한 오류들을 해결한것이다.
2024-03-12T18:51:22.042+09:00 ERROR 25096 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration':
Injection of autowired dependencies failed
이런 오류가 뜨고 밑에
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'searchController' method
com.teamsparta.moamoa.domain.search.controller.SearchController#searchProducts(String, Pageable)
to {GET [/api/search/products]}: There is already 'searchController' bean method
com.teamsparta.moamoa.domain.search.controller.SearchController#searchProductsByLikes(Pageable)
mapped.
이러면 컨트롤러에서 매핑구조가 동일한거라 바꾸면 된다.
.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.
pojo.bytebuddy.ByteBuddyInterceptor]
2024-03-12T19:22:24.956+09:00 ERROR 3468 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].
[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with
path [] threw exception [Request processing failed: org.springframework.http.converter.
HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.
pojo.bytebuddy.ByteBuddyInterceptor]] with root cause
cohttp://m.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class
org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create
BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through
reference chain: org.springframework.data.domain.PageImpl["content"]->java.util.Collections$
UnmodifiableRandomAccessList[0]->cohttp://m.teamsparta.moamoa.domain.product.model.Product["seller"]->
cohttp://m.teamsparta.moamoa.domain.seller.model.Seller$HibernateProxy$m4S7MwFX["hibernateLazyInitializer"])
이 오류는 product가 seller을 참조할때 생기는 오류인데, 상품으로 키워드 검색을 할때 셀러 쪽이랑 무슨 충돌 문제가 생긴다는 뜻이였다.
@ManyToOne(fetch = FetchType.LAZY)에서 LAZY를 EAGER로 해서 해결했다
@JoinColumn(name = "sellerId", nullable = false)
var seller: Seller,
마찬가지로, 리뷰가 상품을 참조하는것도 이렇게 바꾼다.
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "product_id", nullable = false)
val product: Product,
내가 오류를 해결하는건 잘 하는 편이 아니라서 이걸로 또 뭔 문제가 생길지도 모른다. 애초에검색기능을 다 끝내고 나면 또 상품이랑 상품 재고 쪽에 고쳐야할것도 남아있다.