Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[fix] 모델적합도 다중반환 버그 수정 #38

Merged
merged 1 commit into from
Mar 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ public interface ProductModelRepository extends JpaRepository<ProductModel, Long
+ "ORDER BY p.searchTime DESC")
List<RecentModelResponse> getRecentModels(@Param("productId") Long productId);

Optional<ProductModel> findByProductAndModel(Product product, Model model);
// Optional<ProductModel> findByProductAndModel(Product product, Model model);
ProductModel findTopByProductAndModelOrderByIdDesc(Product product, Model model);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

궁금해서 그러는데 어떤 에러가 나서 이렇게 변경한거고 이렇게 하면 어떻게 결과가 나오는거야????

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sominyun
우리가 productModel을 조회할때마다 쌓는 방식이잖아
그래서 product와 model이 같은데 searchTime만 다른 여러개의 row가 계속 쌓여

findByProductAndModel으로 jpa메서드를 사용하면 product와Model이 같은 여러개의 결과가 반환돼
Optional<ProductModel>은 null 또는 1개의 결과가 있어야 하는데 여러개의 결과를 찾으니 List<>형태로 jpa가 찾아 준거야.

그래서 에러가 났던거고, findTopBy를 사용하면 sql에 limit 1을 붙인거랑 같아. 하나의 결과만 반환하도록 보장해주는거야!

거시적으로 보면 ProductModel에 데이터를 계속 쌓는 방식이 안좋은 방식인 것 같아 ㅋㅋㅋㅋ


}
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,8 @@ public ModelFitnessResponse getModelFitness(ModelFitnessRequest request) {
Product product = productRepository.findById(request.productId())
.orElseThrow(() -> new NotFoundUserException("해당 Product를 찾을 수 없습니다")); //커스텀에러

ProductModel productModel = productModelRepository.findByProductAndModel(product, model)
.orElseThrow(() -> new NotFoundUserException(
String.format("product : %d, model : %s의 상품모델을 찾을 수 없습니다", product.getId(), model.getModelName())
)
); //커스텀에러
ProductModel productModel = productModelRepository.findTopByProductAndModelOrderByIdDesc(product, model);


ModelFitness modelFitness = modelFitnessRepository.findById(productModel.getId())
.orElseThrow(() -> new NotFoundUserException("모델적합도를 찾을수없습니다")); //커스텀에러
Expand Down
Loading