밤과라임
3k
2019-10-18 15:19:46 작성 2019-10-18 15:26:20 수정됨
9
164

springboot jpa 전체 컬럼, 일부분 컬럼 나눠서 find로 가져오려한다면 entity class를 두개 만들어야할까요?


동일테이블에서

특정 컬럼만 가져오는 케이스와

전체 가져오는 케이스가 있는데

특정컬럼을 제외한 나머지 컬럼의 데이터가 많기 때문에

가능한 구분지으려 합니다.

이렇다면 두개의 클래스를 만들거나

특정컬럼테이블을 상속받아 전체 가져오는 클래스를 만들어야 할까요??

다른 방법은

하나는 네이티브쿼리로 

컬럼 지정하여 검색하고

다른경우는 그냥 jpa find를 쓰면 될 것같은데 보통 어떻게 하는지 궁금합니다.

0
0
  • 답변 9

  • gofnrk
    172
    2019-10-18 15:37:13

    엔티티는 무조건 하나입니다.


    일부분 컬럼만 가져오고 싶다면 Mapping Interface를 별도로 만들고 리턴 받을 때 엔티티가 아닌 인터페이스로 받으시면 됩니다.

    0
  • 제타건담
    6k
    2019-10-18 15:58:34
    0
  • 밤과라임
    3k
    2019-10-18 16:10:19

    @gofnrk

    답변감사합니다. 상속이 아닌 인터페이스로 받는건가요?

    그렇다면 인터페이스에 부분 entity를 넣고

    전체를 받는 클래스는 만든 인터페이스를 implements 로 가져온다음

    전체를 그리는 걸로 재정의하면되는걸까요?

    죄송하지만 예를 들어주실 수 있나요??

    0
  • 밤과라임
    3k
    2019-10-18 16:12:52

    @제타건담 

    답변감사합니다. querydsl을 써보기도했고 생각도 했지만 익숙하지않아 꺼려졌는데

    좀 더 공부해보겠습니다.

    0
  • gofnrk
    172
    2019-10-18 16:57:17

    @밤과라임

    말로는 설명 드리기가 어렵네요.

    간단하게 예시 소스 작성해드려요.


    Entity

    @Entity
    @Table(name = "board")
    @Getter
    @Setter
    public class BoardEntity {
    	
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Long boardId;
    	
    	private String title;
    	
    	private String description;
    	
    }


    Column Mapping Interface

    public interface BoardMapping {
    	
    	String getBoardId();
    	
    	String getTitle();
    	
    }


    Repository

    public interface BoardRepo extends JpaRepository<BoardEntity, Long> {
    	
    	List<BoardMapping> findByTitle(String title);
    
    }
    0
  • 밤과라임
    3k
    2019-10-18 17:28:58

    @gofnrk 

    답변감사합니다. 받는 타입으로 조절할 수가 있네요.

    인터페이스다보니 하나하나씩 빼서 사용하는 단점이 있긴한데 새로운걸 배웠습니다.

    감사합니다.

    0
  • 제타건담
    6k
    2019-10-18 17:55:00

    근데..저렇게 구현하게 될 경우..지금이야 boardId, title 이렇게 2개만 나오지만..

    저런게 가변적으로 대응해야 할 경우가 발생하게 되면..

    안터페이스 타입만으로 대처하기는 힘들지 않을까요..?

    0
  • 밤과라임
    3k
    2019-10-18 18:13:40

    @제타건담

    네 인터페이스로 저렇게 활용할 수 있는것은 덕분에 새롭게 알게되었고

    class와는 다르게 처리하는데 제한적인것도 tostring이나 가공하며 알게 되었습니다.

    또한 처음 제가 생각했던 nativequery 또한 타입 문제로 

    queryDsl로 작업을 해보려합니다.

    아무래도 이전에도 샘플을 바탕으로 부분적으로 손댄게 전부라

    잘 알지 못해서 익히며 해야 할 듯 합니다.

    답변 감사합니다.

    0
  • gofnrk
    172
    2019-10-18 18:29:25

    @제타건담

    그쵸 힘듭니다.

    제가 아는 여러 방법 중 그나마 깔끔하다고 생각해서 소개해드렸어요.


    QueryDSL 맛보기만 하고 놔뒀었는데 저도 한 번 들여다봐야겠네요.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.