Skip to content

Latest commit

ย 

History

History
74 lines (51 loc) ยท 3.32 KB

File metadata and controls

74 lines (51 loc) ยท 3.32 KB

@DynamicInsert, @DynamicUpdate

JPA์˜ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

  • JPA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑ ๋˜๋Š” ์ˆ˜์ •ํ•  ๋•Œ ๋ชจ๋“  column์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰
  • ์ด๋Š” Hibernate์—์„œ ์ œ๊ณตํ•˜๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต
    • ์—”ํ‹ฐํ‹ฐ์˜ ์–ด๋–ค ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ด์— ๋”ฐ๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ๋ฏธ๋ฆฌ ๋‹จ์ผ INSERT, UPDATE ์ฟผ๋ฆฌ๋ฅผ ์ค€๋น„ํ•ด๋‘๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋” ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ

๊ธฐ๋ณธ ๋™์ž‘

  • ์•„๋ž˜์™€ ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •

    @Entity
    public class MyEntity {
    
    	@Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
    
    	@Column
    	private String name;
    
    	@Column
    	private String description;
    
    	@Column
    	private LocalDate createdAt;
    
    }
  • ์•„๋ž˜์™€ ๊ฐ™์ด ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ์„ฑ ๊ณผ์ •์—์„œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์„ค์ •

    MyEntity entity = new MyEntity();
    entity.setName("name");
  • ์ˆ˜ํ–‰๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅํ•ด ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Œ

    insert into my_entity (name, description, createdAt) values (?, ?, ?)
    • ์ฆ‰, ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Œ
    • ์œ„์—์„œ ๋ช…์‹œ์ ์œผ๋กœ setter๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์€ ํ•„๋“œ๊ฐ’์€ ๋ชจ๋‘ null๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋จ

๊ธฐ๋ณธ ๋™์ž‘์˜ ๋ฌธ์ œ์ 

  • ๊ธฐ๋ณธ ๋™์ž‘์€ insert/update ์‹œ์ ์— null ๊ฐ’์„ ๊ฐ–๋Š” ํ•„๋“œ๋“ค์€ null๋กœ ์ดˆ๊ธฐํ™” ๋˜๋Š” ์ˆ˜์ •ํ•จ
  • ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์›ํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ์ด null๋กœ ์ดˆ๊ธฐํ™”/์ˆ˜์ •๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  • ์œ„์™€ ๊ฐ™์ด ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ/์ˆ˜์ •ํ•˜๋˜ ์„ธํŒ…ํ•˜์ง€ ์•Š์„ ์ปฌ๋Ÿผ์ด null๋กœ ์ดˆ๊ธฐํ™”๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @DynamicInsert, @DynamicUpdate ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ

@DynamicInsert, @DynamicUpdate

  • insert/update ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ๋ชจ๋“  ์ปฌ๋Ÿผ์„ insert/updateํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์„ธํŒ…๋œ ๊ฐ’๋งŒ ๋Œ€์ƒ ์ปฌ๋Ÿผ์— ํฌํ•จํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด ์‹คํ–‰

์–ธ์ œ ์‚ฌ์šฉ?

  • ๋ฐ์ดํ„ฐ์— ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ/์ˆ˜์ •์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ์ฃผ์ž…ํ•˜๊ณ ์ž ํ•  ๋•Œ ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ์ƒ๋žตํ•˜๋ฉด ์ฃผ์ž…ํ•˜๋ ค๋Š” ๊ฐ’ ๋Œ€์‹  ์—”ํ‹ฐํ‹ฐ์— ์„ธํŒ…๋œ null์ด ๋ฎ์–ด์”Œ์›Œ์ ธ ๊ฐ’์ด ์†Œ์‹ค๋  ์ˆ˜ ์žˆ์Œ
  • ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฃผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ
    1. JPA์˜ EntityListener
      • ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด ํŠน์ • ์‹œ์  ์ดํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฆฌ์Šค๋„ˆ
      • ๋ฐ์ดํ„ฐ ์กฐ์ž‘์ด null ํ•„๋“œ์˜ ๋ฐ˜์˜๋ณด๋‹ค ๋จผ์ € ์ผ์–ด๋‚˜๋ฉด ๊ฐ’์ด ๋ฎ์–ด์”Œ์›Œ์ง€๊ฒŒ ๋จ
        • ์œ„์˜ createdAt๊ณผ ๊ฐ™์€ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ์—์„œ ์ด๋Ÿฐ ์‹ค์ˆ˜๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒ
    2. @ColumnDefault
      • ํŠน์ • ํ•„๋“œ์— default ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜
      • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฟผ๋ฆฌ์— ์˜ํ•œ null ๊ฐ’ ๋ฐ˜์˜์— ์˜ํ•ด ๊ฐ’์ด ๋ฎ์–ด์”Œ์›Œ์ง€๊ฒŒ ๋จ

์ฃผ์˜ํ•  ์ 

  • ์•ž์„œ ๋งํ–ˆ๋“ฏ Hibernate๊ฐ€ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ๋™์ผ ์ฟผ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•จ
  • @DynamicInsert, @DynamicUpdate๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์˜ insert/update ์ž‘์—…์ด ๊ธฐ๋ณธ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋А๋ ค์ง