๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์—”๋“œ/Spring boot

Entity ์—์„œ ์กฐ๊ฑด์„ ์ž๋™์œผ๋กœ ๋ถ™์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•๋“ค (@SQLRestriction, @Where, @Filter)

by sh119 2025. 4. 14.

Repository์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ๋•Œ, JPA์— ์ง์ ‘ IsDeletedFalse ์ด๋Ÿฐ์‹์œผ๋กœ ๋ถ™์—ฌ์ฃผ๊ฒŒ ๋˜๋ฉด ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์ด ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ์กฐ๊ฑด๋“ค์„ ๋ถ™์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ๋น„๊ตํ•ด๋ณด์•˜๋‹ค. 

 

 

1. @SQLRestriction

@SQLRestriction("deleted_at IS NULL")

 

 

  • SQL๋ ˆ๋ฒจ ์กฐ๊ฑด
  • Hibernate๊ฐ€ ์‹ค์ œ SQL์„ ์ƒ์„ฑํ• ๋•Œ ์ง์ ‘ ์กฐ๊ฑด์„ ๋ถ™์ž„
  • but, sql ์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด DBMS ์˜์กด์ ์ผ ์ˆ˜ ์žˆ์Œ

 

2. @Where

@Where(clause = "deleted_at IS NULL")
  • HQL ๋ ˆ๋ฒจ์—์„œ๋งŒ ์กฐ๊ฑด๋ถ€์—ฌ
  • ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์กฐํšŒ ์ฟผ๋ฆฌ์— ์ž๋™์œผ๋กœ Where์ ˆ ์ถ”๊ฐ€
  • ๋…ผ๋ฆฌ ์‚ญ์ œ ๊ฐ™์€ ๋‹จ์ˆœ ์กฐ๊ฑด ํ•„ํ„ฐ์— ์ข‹์Œ
  • ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์ด ๋ถˆ๊ฐ€ํ•˜๊ณ , ์กฐ๊ฑด์ด ๊ณ ์ •์ ์ด๋ผ๋Š” ๋‹จ์ ์ด ์žˆ์Œ

 

3. @Filter

@FilterDef(name = "deletedFilter", parameters = @ParamDef(name = "isDeleted", type = "boolean"))
@Filter(name = "deletedFilter", condition = "is_deleted = :isDeleted")

 

์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉ์‹œ์— ์˜ˆ์‹œ :

session.enableFilter("deletedFilter").setParameter("isDeleted", false);

 

  • ๊ฐ€์žฅ ์œ ์—ฐํ•˜๊ณ  ๋™์ ์ธ ํ•„ํ„ฐ
  • ์—”ํ‹ฐํ‹ฐ์— ํ•„ํ„ฐ์„ ์–ธ + ์„ธ์…˜์—์„œ ํ™œ์„ฑํ™” ํ•ด์•ผ ๋™์ž‘
  • ๋™์  ์กฐ๊ฑด ์ œ์–ด์‹œ์—๋Š” Filter์‚ฌ์šฉ (ex) ์ผ๋ฐ˜ user์˜ ์กฐํšŒ์—๋Š” ๋…ผ๋ฆฌ ์‚ญ์ œ๋˜์ง€ ์•Š์€ ๊ฒƒ๋งŒ ๋ณด์—ฌ์ฃผ๊ณ , ๊ด€๋ฆฌ์ž์—๊ฒŒ๋Š” ๋‹ค ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฝ์šฐ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธํ•จ