유저에게
정보를 받아서 StockDTO 객체로 만든다.
만든 객체를 Entity로 바꾸어서 stockRepository에 저장한다.
== Stock 테이블에 저장한다.
하지만 여기서 문제가 발생한다.
DTO를 Entity로 바꿀 때 toEntity
메소드를 호출하는데, 그 내용은 다음과 같다.
public Stock toEntity(){
return Stock.builder()
.stockName(stockName)
.price(price)
.theme(theme)
.stockPriceIndex(stockPriceIndex)
.status(status)
.build();
}
stockId에 관한 내용이 빠져있다.
즉 Entity를 만들때 stockId를 주입하지 않는다는 것이다.
stockId는 PK이므로 반드시 필요하다.
그래서, Entity인 Stock
클래스의 builder 메소드를 수정하고, DTO도 아래와 같이 수정했다.
public Stock toEntity(){
return Stock.builder()
.stockId(stockId)
.stockName(stockName)
.price(price)
.theme(theme)
.stockPriceIndex(stockPriceIndex)
.status(status)
.build();
}
이전 포스트에서 JPA Repository를 extends한 리포지토리 인터페이스는 내용을 작성하지 않아도 된다고 했었다.
그럼 repository의 기능을 추가하고 싶다면 어떻게 해야할까?
"그냥 내가 새로운 메소드를 만들면 되지 않을까?" 했었는데, 생각해보니 리포지토리는 인터페이스였다...
그럼, 어떤 방식으로 확장할 수 있을까?
개발자가 "특정 형식"에 맞춰서 메소드를 정의하기만 하면, JPA가 알아서 메소드 내용을 구현해준다.
주식이름(StockName)을 넣으면 해당 주식 정보를 저장한 StockDTO를 반환하는 코드를 작성하고, 테스트했다.
public StockDTO findByStockName(String stockName){
Stock stock = stockRepository.findByStockName(stockName);
return StockDTO.builder()
.stockId(stock.getStockId())
.stockName(stock.getStockName())
.price(stock.getPrice())
.theme(stock.getTheme())
.stockPriceIndex(stock.getStockPriceIndex())
.status(stock.getStatus())
.build();
}