๐ Native Query ๋?
JPQL์ ์ฌ์ฉํด์ ์ฟผ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ MySQL๊ณผ ๋น์ทํ ํ์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ ์ฉํ ์ ์๋ค.
๊ทธ๋ฌ๋, JPQL์์๋ ํ์ค SQL์ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ง์ํ์ง๋ง, ์ง์ํ์ง ๋ชปํ๋ ๋ฌธ๋ฒ๋ค๋ ์กด์ฌํ๋ค. ( ex. sub query )
์ด๋ Native Query๋ฅผ ์ฌ์ฉํ๋ฉด JPQL์์ ์ง์ํ์ง ๋ชปํ๋ ๋ฌธ๋ฒ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
๐ Native Query ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
//-- JPQL
@Query(value="SELECT M from Member M" )
//-- Native Query
@Query(value="SELECT * from Member m", nativeQuery= true )
๐ Native Query์์ @Param์ Enum์ ๋ฃ๋ ๋ฐฉ๋ฒ?
JPQL์ ์ฌ์ฉํ๋ฉด, Java์ Enum ํ์ ์ ์๋์ ๊ฐ์ด ์ฟผ๋ฆฌ ๋ณ์๋ก ๋ฃ์ ์ ์๋ค.
@Query(value="SELECT M FROM MEMBER M WHERE TYPE = (:type) )
fun getMemberByType(@Param type MemberType)
enum class MemberType(
MASTER,
NORMAL,
)
๊ทธ๋ฌ๋ NativeQuery์์ Enumํ์ ์ ์ฌ์ฉํด์ ์์ ๊ฐ์ด ๋ณ์๋ก ๋ฃ์ผ๋ฉด,,, ์๋ฌ๊ฐ ๋๋ค. ( String์ผ๋ก ๋ฃ์ด์ผ ํ๋๋ก.. )
์ด๋ป๊ฒ ํ๋ฉด String์ผ๋ก ๋ณ๊ฒฝํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ ํด์์ํค๊ธฐ ์ํด, ๊ทธ๋๋ก Enum์ ์ฌ์ฉํ ์ ์์๊น?
ํด๊ฒฐ์ฑ ์ SpEL expression ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๐ SpEL (Spring Expression Language)์ด๋?
- ์คํ๋ง ํ๋ก์ ํธ์์ ๋ฐํ์์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ฌ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ ์ ์๋ ํํ์
( ์ฐธ๊ณ : https://atoz-develop.tistory.com/entry/Spring-SpEL-Spring-Expression-Language )
๐ SpEL์ ์ฌ์ฉํด์ Native Query์์ Enum ํ์ ์ฌ์ฉํ๊ธฐ
- Enum์ ํ ๋ณ์๋ง ์ฌ์ฉํ๊ธฐ#{#๋ณ์.name()}
@Query(value="SELECT * FROM member m WHERE m.type = #{#type.name()} )
fun getMemberByType(@Param("type") type MemberType)
enum class MemberType(
MASTER,
NORMAL,
)
- Enum์ Collection(List, Set์ผ๋ก ์ฌ์ฉํ๊ธฐ#{#๋ณ์.![name()]}
@Query(value="SELECT * FROM member m WHERE m.type in #{#types.![name()]} )
fun getMemberInTypes(@Param("types") types Set<MemberType>)
enum class MemberType(
MASTER,
NORMAL,
)
'Back-end > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] JPA native query ์ฌ์ฉ์ dto mapping (0) | 2022.02.06 |
---|---|
[JPA] JPA (Java Persistence API)๋? (0) | 2020.09.08 |