- 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์ด๋ ธํ ์ด์ ์ ์ด์ฉํ ์ ์์
- insert/update ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋, ๋ชจ๋ ์ปฌ๋ผ์ insert/updateํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ์ง ์๊ณ ์ธํ ๋ ๊ฐ๋ง ๋์ ์ปฌ๋ผ์ ํฌํจํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ์คํ
- ๋ฐ์ดํฐ์ ์ํฐํฐ ์์ฑ/์์ ์ด ์๋
๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ฐ์ ์ฃผ์ ํ๊ณ ์ ํ ๋ํด๋น ์ด๋ ธํ ์ด์ ์ ์๋ตํ๋ฉด ์ฃผ์ ํ๋ ค๋ ๊ฐ ๋์ ์ํฐํฐ์ ์ธํ ๋ null์ด ๋ฎ์ด์์์ ธ ๊ฐ์ด ์์ค๋ ์ ์์ - ์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ ์ฌ์ฉํ๋ฉฐ, ์ฃผ๋ก ์๋์ ๊ฐ์ ๊ธฐ๋ฅ๋ค๊ณผ ํจ๊ป ์ฌ์ฉ
- JPA์ EntityListener
- ์ํฐํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํด ํน์ ์์ ์ดํ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฆฌ์ค๋
- ๋ฐ์ดํฐ ์กฐ์์ด null ํ๋์ ๋ฐ์๋ณด๋ค ๋จผ์ ์ผ์ด๋๋ฉด ๊ฐ์ด ๋ฎ์ด์์์ง๊ฒ ๋จ
- ์์ createdAt๊ณผ ๊ฐ์ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ์์ ์ด๋ฐ ์ค์๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์
- @ColumnDefault
- ํน์ ํ๋์ default ๊ฐ์ ์ค์ ํ๋ ์ด๋ ธํ ์ด์
- ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟผ๋ฆฌ์ ์ํ null ๊ฐ ๋ฐ์์ ์ํด ๊ฐ์ด ๋ฎ์ด์์์ง๊ฒ ๋จ
- JPA์ EntityListener
- ์์ ๋งํ๋ฏ Hibernate๊ฐ ๋ชจ๋ ์ปฌ๋ผ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋์ผ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํจ์ผ๋ก์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํ๊ธฐ ์ํจ
- @DynamicInsert, @DynamicUpdate๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํด๋น ์ํฐํฐ ํด๋์ค์ insert/update ์์ ์ด ๊ธฐ๋ณธ ์ ๋ต์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋๋ ค์ง