[ํ”Œ๋žญ๊ณ ] JPA delete() แ„แ…ฏแ„…แ…ต แ„‹แ…กแ†ซ แ„‚แ…กแ„€แ…กแ„‚แ…ณแ†ซ แ„†แ…ฎแ†ซแ„Œแ…ฆ แ„’แ…ขแ„€แ…งแ†ฏ

2023. 9. 28. 12:48ยท๊ฐœ๋ฐœ ๊ณต๋ถ€/Spring

๐Ÿ’ฅ ๋ฌธ์ œ ์ƒํ™ฉ

JPA๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ xxxRepository.delete(Entity entity) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์•„๋ฌด๋ฆฌ ํ•ด๋„ delete ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ์‚ญ์ œ ์ฝ”๋“œ

@Transactional
public void rejectOrExitSchedule(Long memberId, Long scheduleId) {
    Schedule schedule = findScheduleById(scheduleId);
    validateMemberNotOwner(memberId, schedule);

    ScheduleMember scheduleMember = findScheduleMemberByMemberIdAndScheduleId(memberId, scheduleId);
    scheduleMemberRepository.delete(scheduleMember);
}

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฒฐ๊ณผ

์—”ํ‹ฐํ‹ฐ ๋ง๊ณ  id๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ œ๊ฑฐ๋ฅผ ์‹œ๋„ํ•ด๋„ JPA ๊ตฌํ˜„์ฒด ๋‚ด๋ถ€์—์„œ๋Š” ๋‹ค์‹œ delete()๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋–„๋ฌธ์— ๋งˆ์ฐฌ๊ฐ€์ง€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค.

id๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ œ๊ฑฐ๋ฅผ ์‹œ๋„

๊ฒฐ๊ตญ ๋‹ค์Œ๊ณผ ๊ฐ™์ด JPQL๋กœ ์ง์ ‘ delete ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ž„์‹œ๋กœ ํ•ด๊ฒฐํ•˜๊ธด ํ–ˆ์ง€๋งŒ, ์™œ ์ด๋Ÿฌํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋˜์งˆ ์•Š์•„ ์›์ธ์„ ์ฐพ์•„๋ณด์•˜๋‹ค.

๋ ˆํฌ์ง€ํ† ๋ฆฌ JPQL ์ฝ”๋“œ

delete ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

...
scheduleMemberRepository.deleteByMemberIdAndScheduleId(memberId, scheduleId);
...

์‹คํ–‰ ๊ฒฐ๊ณผ

๐Ÿฉบ ์›์ธ

์—ฌ๊ธฐ์ €๊ธฐ ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์˜์™ธ๋กœ ์ž˜ ์•Œ๋ ค์ง„ ๋ฌธ์ œ์—ฌ์„œ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฌธ์ œ์˜ ์›์ธ์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์‚ญ์ œํ•˜๋ ค๋Š” ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š” ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.

์‚ญ์ œํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ์—”ํ‹ฐํ‹ฐ๋Š” ์ผ์ •์— ์ฐธ์—ฌํ•˜๋Š” ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ScheduleMember ์—”ํ‹ฐํ‹ฐ์ด๊ณ , ์ด ์—”ํ‹ฐํ‹ฐ๋Š” ์ผ์ • ์—”ํ‹ฐํ‹ฐ์ธ Schedule ๊ณผ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š”๋‹ค.

์—”ํ‹ฐํ‹ฐ ์—ฐ๊ด€๊ด€๊ณ„

๋”ฐ๋ผ์„œ, ์•ž์„œ ์‚ดํŽด๋ณธ ๋ฌธ์ œ์˜ ์ฝ”๋“œ์—์„œ ๊ฒ€์ฆ ๋กœ์ง ์ˆ˜ํ–‰์„ ์œ„ํ•ด Schedule(ScheduleMember๋ฅผ fetch join ํ•จ)์„ ๋จผ์ € ์กฐํšŒํ•˜๊ฒŒ ๋˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— Schedule ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๊ณ , ์ดํ›„ ScheduleMember๋ฅผ ์กฐํšŒํ•˜๋ฉด ์ด๋ฏธ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๋™์ผ id์˜ ScheduleMember๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— select ์ฟผ๋ฆฌ ์—†์ด ์บ์‹œ์—์„œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์กฐํšŒ๋œ๋‹ค.

๋””๋ฒ„๊น…์„ ํ†ตํ•ด ์ฐธ์กฐ๊ฐ’์„ ํ™•์ธํ•ด๋ณด๋ฉด Schedule์˜ List<ScheduleMember> ์— ํฌํ•จ๋œ ScheduleMember์™€ ์ดํ›„์— ์กฐํšŒํ•œ ScheduleMember๊ฐ€ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”จ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” delete() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์™€์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋Š์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด ๊ฒฝ์šฐ Schedule์˜ ๋ฆฌ์ŠคํŠธ์—์„œ ScheduleMember๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ delete ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Schedule

๋‹ค์Œ๊ณผ ๊ฐ™์ด Schedule์— scheduleMembers ๋ฆฌ์ŠคํŠธ์—์„œ ์ฃผ์–ด์ง„ ScheduleMember์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ ,

public void deleteScheduleMember(ScheduleMember scheduleMember) {
    scheduleMembers.remove(scheduleMember);
}

์•„๋ž˜์™€ ๊ฐ™์ด delete ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๊ธฐ ์ „์— ํ˜ธ์ถœํ•ด์ฃผ๋ฉด,

repository.delete() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ๋Œ€๋กœ delete ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด๋Ÿฐ์‹์œผ๋กœ Schedule์—์„œ ScheduleMember๋ฅผ ์ œ๊ฑฐํ•˜๋„๋ก ๊ตฌํ˜„ํ• ๊ฑฐ๋ฉด orphanRemoval ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ„๋„๋กœ ScheduleMemberRepository์˜ delete ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  Schedule์˜ deleteScheduleMember() ๋งŒ ํ˜ธ์ถœํ•ด๋„ delete ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€๋„๋ก ๊ตฌ์„ฑํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

  • https://stackoverflow.com/questions/22688402/delete-not-working-with-jparepository

'๊ฐœ๋ฐœ ๊ณต๋ถ€ > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„‹แ…ฆแ„‰แ…ฅแ„†แ…กแ†ซ @Async แ„Œแ…ฅแ†จแ„‹แ…ญแ†ผแ„ƒแ…ฌแ„Œแ…ต แ„‹แ…กแ†ญแ„ƒแ…ฉแ„…แ…ฉแ†จ แ„’แ…กแ„€แ…ต  (0) 2023.12.27
[แ„‘แ…ณแ†ฏแ„…แ…ขแ†ผแ„€แ…ฉ] ์ฃผ์š”/๋ถ€๊ฐ€ ๋กœ์ง แ„แ…ณแ„…แ…ขแ†ซแ„Œแ…ขแ†จแ„‰แ…งแ†ซ แ„‡แ…ฎแ†ซแ„…แ…ตแ„’แ…กแ„€แ…ต - TransactionalEventListenerแ„‹แ…ช REQUIRES_NEW  (0) 2023.11.27
[ํ”Œ๋žญ๊ณ ] JPQL fetch join + whereแ„Œแ…ฅแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธแ„€แ…ช แ„Œแ…ฉแ„€แ…ฅแ†ซ  (0) 2023.08.29
[ํ”Œ๋žญ๊ณ ] แ„‹แ…ตแ†ฏแ„ƒแ…ขแ„‹แ…ตแ†ฏแ„‹แ…ฆแ„‰แ…ฅ แ„‹แ…ตแ†ฏแ„ƒแ…ขแ„ƒแ…กแ„…แ…ฉ แ„‡แ…งแ†ซแ„€แ…งแ†ผ แ„‰แ…ต validation แ„€แ…ชแ†ซแ„…แ…งแ†ซ แ„†แ…ฎแ†ซแ„Œแ…ฆ (Custom ConstraintValidator)  (0) 2023.08.23
[ํ”Œ๋žญ๊ณ ] แ„‰แ…ณแ„‘แ…ณแ„…แ…ตแ†ผ แ„‰แ…ตแ„แ…ฒแ„…แ…ตแ„แ…ต แ„‰แ…ตแ†ฏแ„‘แ…ข แ„’แ…ขแ†ซแ„ƒแ…ณแ†ฏแ„…แ…ฅ แ„‹แ…ฆแ„‰แ…ฅ แ„Œแ…ตแ†จแ„Œแ…ฅแ†ธ แ„‹แ…จแ„‹แ…ฌแ„…แ…ณแ†ฏ แ„ƒแ…ฅแ†ซแ„Œแ…ตแ„†แ…งแ†ซ แ„‹แ…กแ†ซ แ„ƒแ…ฌแ„‚แ…ณแ†ซ แ„‹แ…ตแ„‹แ…ฒ  (0) 2023.08.20
'๊ฐœ๋ฐœ ๊ณต๋ถ€/Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • แ„แ…ฆแ„‰แ…ณแ„แ…ณแ„‹แ…ฆแ„‰แ…ฅแ„†แ…กแ†ซ @Async แ„Œแ…ฅแ†จแ„‹แ…ญแ†ผแ„ƒแ…ฌแ„Œแ…ต แ„‹แ…กแ†ญแ„ƒแ…ฉแ„…แ…ฉแ†จ แ„’แ…กแ„€แ…ต
  • [แ„‘แ…ณแ†ฏแ„…แ…ขแ†ผแ„€แ…ฉ] ์ฃผ์š”/๋ถ€๊ฐ€ ๋กœ์ง แ„แ…ณแ„…แ…ขแ†ซแ„Œแ…ขแ†จแ„‰แ…งแ†ซ แ„‡แ…ฎแ†ซแ„…แ…ตแ„’แ…กแ„€แ…ต - TransactionalEventListenerแ„‹แ…ช REQUIRES_NEW
  • [ํ”Œ๋žญ๊ณ ] JPQL fetch join + whereแ„Œแ…ฅแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผ แ„‡แ…กแ†ผแ„‡แ…ฅแ†ธแ„€แ…ช แ„Œแ…ฉแ„€แ…ฅแ†ซ
  • [ํ”Œ๋žญ๊ณ ] แ„‹แ…ตแ†ฏแ„ƒแ…ขแ„‹แ…ตแ†ฏแ„‹แ…ฆแ„‰แ…ฅ แ„‹แ…ตแ†ฏแ„ƒแ…ขแ„ƒแ…กแ„…แ…ฉ แ„‡แ…งแ†ซแ„€แ…งแ†ผ แ„‰แ…ต validation แ„€แ…ชแ†ซแ„…แ…งแ†ซ แ„†แ…ฎแ†ซแ„Œแ…ฆ (Custom ConstraintValidator)
gmelon
gmelon
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • gmelon
    gmelon's greenhouse
    gmelon
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (91)
      • ๊ฐœ๋ฐœ ๊ณต๋ถ€ (28)
        • Java (6)
        • Spring (10)
        • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (11)
        • ๊ธฐํƒ€ (1)
      • ํ”„๋กœ์ ํŠธ (12)
        • [์•ฑ] ํ”Œ๋žญ๊ณ  (4)
        • ์กธ์—… ํ”„๋กœ์ ํŠธ (8)
      • ์Šคํ„ฐ๋”” (0)
        • ์ž๋ฐ” (30)
      • ๊ธฐ๋ก (15)
        • ํ›„๊ธฐ, ํšŒ๊ณ  (9)
        • SSAFYcial (5)
        • ์ด๊ฒƒ์ €๊ฒƒ (1)
      • etc. (6)
        • ๋ชจ๊ฐ์ฝ” (6)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
    • github
    • ์Šคํฌ๋žฉ
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ž๋ฐ” Collector
    groupingBy mapping
    ์‹ธํ”ผ ํšŒ๊ณ 
    ์กธ์—…ํ”„๋กœ์ ํŠธ
    2024 ํšŒ๊ณ 
    2024 ์ƒ๋ฐ˜๊ธฐ ํšŒ๊ณ 
    java
    groupingBy()
    ํƒœ์ดˆ๋งˆ์„์ด์•ผ
    ํ”„๋ฆฌํ‹ฐ์–ด ์ข…๋ฃŒ
    Collector groupingBy()
    ํ•œ๊ธ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด
    ์ž๋ฐ”
    Java Collector
    AWS ํ”„๋ฆฌํ‹ฐ์–ด ์ข…๋ฃŒ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
gmelon
[ํ”Œ๋žญ๊ณ ] JPA delete() แ„แ…ฏแ„…แ…ต แ„‹แ…กแ†ซ แ„‚แ…กแ„€แ…กแ„‚แ…ณแ†ซ แ„†แ…ฎแ†ซแ„Œแ…ฆ แ„’แ…ขแ„€แ…งแ†ฏ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”