250x250
๋ฐ˜์‘ํ˜•
Notice
Recent Posts
Recent Comments
Link
ยซ   2024/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

BEAT A SHOTGUN

[SPRING] FOR ๋ฅผ ์ด์šฉํ•ด SQL๋ฌธ์œผ๋กœ๋Š” ๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ENTITY ๋‚ด๋ถ€ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋ณธ๋ฌธ

PROJECT

[SPRING] FOR ๋ฅผ ์ด์šฉํ•ด SQL๋ฌธ์œผ๋กœ๋Š” ๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ENTITY ๋‚ด๋ถ€ ๊ฒ€์ƒ‰ํ•˜๊ธฐ

thovy 2022. 10. 27. 02:56
728x90
๋ฐ˜์‘ํ˜•
SMALL

๐Ÿคทโ€โ™‚๏ธ SITUATION

  1. POST ENTITY ๋Š” EMOTION ENTITY ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ List ์ด Post ์— ์žˆ๋‹ค.

    // Post.java
    
    public class Post{
       ...
    
       @ManyToMany(fetch = FetchType.EAGER)
       @JoinColumn(name = "emotionId", referencedColumnName = "emotionId")
       private List<Emotion> emotion;
    
    }
    1. List ๋Š” SQL ์—์„œ ์ธ์‹ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๐Ÿค” What I Want

Search!

  1. word ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด title, contents ๊ทธ๋ฆฌ๊ณ  emotion ์— ์žˆ๋Š” emotionword ์— word ๊ฐ€ ํฌํ•จ๋œ post ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค!
  2. sql ๋ฌธ์„ ์ž‘์„ฑํ•˜์ž
    SELECT * FROM post WHERE TITLE LIKE %:search% OR CONTENTS LIKE %:search% OR EMOTION.EMOTIONWORD LIKE %:search%
    // PostRepository.java
    

@Query(value = "SELECT * FROM post WHERE TITLE LIKE %:search% OR CONTENTS LIKE %:search% OR EMOTION.EMOTIONWORD LIKE %:search%", nativeQuery = true)
public List findBySearch(@Param("search") String search);

  3. ์•ˆ๋˜์ง€!โŒ

# โŒ ERROR

  ## HIBERNATE CAN'T FIND `"EMOTION"`

# โœ…SOLUTION

  ## KEYSET  + contains ๐Ÿ˜ฒ

  ๊ทธ๋ž˜์„œ ๊ณ ๋ฏผ ๋์—

  1. SQL ์€
  `SELECT * FROM post WHERE TITLE LIKE %:search% OR CONTENTS LIKE %:search%`
  ์ด๋ ‡๊ฒŒ ์“ฐ๊ณ 

  2. KEYSET ์„ ์ด์šฉํ•œ ๋’ค contains โ—
  ```java
  // PostServiceImpl.java
  public List<Post> findByWord(String word){
    List<Post> postList = postRepository.findBySearch(word);
  โœจโœจ
    for(Post posttmp : postRepository.findAll()){
        for (Emotion emotiontmp : posttmp.getEmotion()){
            if(emotiontmp.getEmotionWord().contains(search)){
                postList.add(posttmp);
            }
        }
    }
  โœจโœจ
    return postList;
  }

๋

์ด๋ ‡๊ฒŒ sql ์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด java ๊ฐ€ ํ•ด๊ฒฐํ•ด์ค€๋‹ค.

์–ด๋Š ๊ฒƒ ํ•˜๋‚œ ์†Œํ™€ํ•˜์ง€ ๋ง์ž!

WHY "KEYSET"

keyset ์ด ์ œ์ผ ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๋‹ค. ์ฐธ๊ณ 

์ถ”ํ›„์— post ๊ฐ€ ๋งŽ์•„์กŒ์„ ๋•Œ findAll ํ•œ posts ๋ฅผ ๋ชจ๋‘ for๋ฌธ ๋Œ๋ฆฌ๋ ค๋ฉด ์—„์ฒญ ์˜ค๋ž˜๊ฑธ๋ฆดํ…๋ฐ ์ œ์ผ ๋น ๋ฅธ ๊ฑฐ ์จ์•ผ์ง€!

ํ–‰๋ณตํ•˜๋‹ค.

์–ด์ฉŒ๋ฉด ๋‚˜๋Š” ์•„์ฃผ ๋ฉ์ฒญ์ด๋Š” ์•„๋‹์ง€๋„...?

728x90
๋ฐ˜์‘ํ˜•
LIST
Comments