인프런 커뮤니티 질문&답변

octo J님의 프로필 이미지

작성한 질문수

JPA의 DB조회에 대해서 질문드립니다.

22.03.12 20:17 작성

·

171

0

안녕하세요.

스프링JPA로 블로그 게시판을 만들고 있습니다.

복잡한 기능 말고 게시판만 하나 만들어 보고 심층공부를 들어갈려고 하는중입니다.

--------------------------------------------------------------------------------------------------------------------

일단 DB는 이렇게 구성돼 있고  BLOGLIST로 게시판 목록을 관리하기 위해  BLOG_NUM에 외래키를 주고 테이블을 따로 만들어서 조인했습니다.

 

--------------------------------------------------------------------------------------------------------------------

그리고 엔티티를 각각 만들고 다대일 연결까지 성공해서 데이터 조회까지 됩니다.

@Entity(name = "BLOG")
@Getter @Setter @ToString
@RequiredArgsConstructor
public class Blog {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="CON_NUM")
    private Integer con_num;

    @ManyToOne
    @JoinColumn(name = "BLOG_NUM", referencedColumnName = "BLOG_NUM")  //referencedColumnName = "BLOG_NUM"~~ 은 어떤 컬럼과 연결이 됐는지 지정.
    private BlogList blogObj;

    @Column(name="CON_TITLE")
    private String title;

    @Column(name="CON_CONTENT")
    private String content;

    @Column(name ="CON_WRITEDATE")
    private Date writeDate;

}

 

@Entity(name = "BLOGLIST")
@Getter @Setter @ToString
@RequiredArgsConstructor
public class BlogList {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "BLOG_NUM")
    private Integer blogNum;

    @Column(name = "BLOG_NAME")
    private String blogName;

}

----------------------------------------------------------------------------------------------------------------------

이런식으로 BLOGLIST테이블의 항목까지 출력을 할 수 있었습니다.

여기서부터 문제입니다.

SELECT * FROM BLOG WHERE=BLOG_NUM=?

이러한 쿼리를 실행시켜서 블로그의 메뉴에서 각각의 항목을 눌렀을 때 각각의 내용을 출력하려고 합니다.

------------------------------------------------------------

그래서 제가 시도한것은

1. 레파지토리에서 아래 주석된 메소드로 조회메소드를 만들고 

public interface BlogRepository extends JpaRepository<Blog, Integer>{
    List<Blog> findByTitleContaining(String searchWord);
    //List<Blog> findByBlogObj(Integer blogNum);
}

컨트롤러에서 이런식으로 조회를 시도 해보았으나 잘 되지 않았습니다.

    // 게시판별 리스트
@GetMapping("/contest")
public String testList(Integer blogNum, Model model){
        model.addAttribute("list", blogRepository.findByBlogObj(blogNum));
        return "/layouts/conList";
    }

----------------------------------------------------------

그래서 2번으로 시도한 것이 리파지토리에 쿼리 직접 넣는 것이었습니다.

@Query(value = "SELECT * FROM BLOG B WHERE B.BLOG_NUM = ?", nativeQuery = true) //true SQL, false JPQL
List<Blog> findAllByBlogNum(Integer BlogNum);
@GetMapping("test")
public String findBlog(Integer BlogNum, Model model){
System.out.println("파람:" + BlogNum);
List<Blog> blog = blogRepository.findByBlogObj(BlogNum);
model.addAttribute(blog);
return "/layouts/conList";
}

이 방식은 이렇게 파라미터를 보냈으나 Null값이 뜨고 파라미터를 가져오지 못하네요.

-------------------------------

아무래도 엔티티 설계에 제가 이해가 부족해서 그런것 같은데

엔티티에 어느 부분을 손을 보아야 제가 원하는 조회를 할수 있을까요?

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
octo J님의 프로필 이미지

작성한 질문수

질문하기