CodeGym /Java Course /All lectures for KO purposes /Hibernate์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

Hibernate์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

All lectures for KO purposes
๋ ˆ๋ฒจ 1 , ๋ ˆ์Šจ 837
์‚ฌ์šฉ ๊ฐ€๋Šฅ

merge() ๋ฉ”์„œ๋“œ์˜ ๋‰˜์•™์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐœ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด Hibernate๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋Š” ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” merge() ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋ฉด SQL UPDATE ์ฟผ๋ฆฌ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

User user = new User();
user.setName("Kolyan");
session.save(user);

session.evict(user);     // detach the object from the session
user.setName("Masha");

User user2 = (User) session.merge(user);

์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋‰˜์•™์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € merge() ๋ฉ”์„œ๋“œ๋Š” ์—…๋ฐ์ดํŠธ๋œ ๊ฐ์ฒด์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐœ์ฒด๋Š” ์ง€์† ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์„ธ์…˜ ๊ฐœ์ฒด์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. merge() ๋ฉ”์„œ๋“œ ์— ์ „๋‹ฌ๋œ ๊ฐœ์ฒด๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

user์™€ user2 ์‚ฌ์ด์— ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. POJO ๊ฐ์ฒด๋ฅผ merge() ๋ฉ”์„œ๋“œ ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋ก์‹œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Hibernate ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ„). ๋”ฐ๋ผ์„œ merge() ๋ฉ”์„œ๋“œ๋Š” ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”.

๋‘˜์งธ, merge() ์— ์ „๋‹ฌ๋œ ๊ฐ์ฒด๊ฐ€ ์ž„์‹œ ์ƒํƒœ(๊ทธ๋ฆฌ๊ณ  ID๊ฐ€ ์—†์Œ)์ด๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณ„๋„์˜ ์ค„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, persist() ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค .

์…‹์งธ, ์„ธ์…˜์— ์ด๋ฏธ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด(Persist ์ƒํƒœ)๊ฐ€ merge() ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌ๋˜๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ˆœํžˆ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์™œ? ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๋ฉด ์–ด์จŒ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ธฐ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

User user = new User();
user.setName("Kolyan");
session.save(user);

user.setName("Masha"); //change the object attached to the session

session.close();  //all changed objects will be written to the database

๋ณ€๊ฒฝ ํ›„ ๋งค๋ฒˆ ๊ฐœ์ฒด๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ์ฒด๊ฐ€ Persist ์ƒํƒœ์— ์žˆ์œผ๋ฉด Hibernate๊ฐ€ ๋ชจ๋“  ์ž‘์—…์„ ์ž์ฒด์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. "๋ฒ ์ด์Šค์— ๋ถ€์ฐฉ๋œ" ๊ฐœ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฒ ์ด์Šค์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

update() ๋ฉ”์„œ๋“œ์˜ ๋‰˜์•™์Šค

Hibernate๋Š” ๋˜ํ•œ save() ๋ฉ”์†Œ๋“œ ์ฒ˜๋Ÿผ ์ด์ „ ๋ฒ„์ „์—์„œ ์ƒ์†๋œ update() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ ์ €์žฅ๋œ ๊ฐœ์ฒด์˜ ๋ฐ์ดํ„ฐ๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด SQL UPDATE ์ฟผ๋ฆฌ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

User user = new User();
user.setName("Kolyan");
session.save(user);

session.evict(user);     // detach the object from the session
user.setName("Masha");

session.update(user);

์ด ๋ฉ”์„œ๋“œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ธฐ์กด ๊ฐœ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒˆ ๊ฐ์ฒด์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

User user = new User();
user.setName("Kolyan");
session.update(user);   //an exception will be thrown here

saveOrUpdate() ๋ฉ”์„œ๋“œ

JPA๊ฐ€ ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” persist() ๋ฉ”์„œ๋“œ ์˜ ๊ธฐ๋Šฅ์ด saveOrUpdate() ๋ฉ”์„œ๋“œ ์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ์˜ ์ž„๋ฌด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ์กด ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์—†๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฑฐ์˜ ํ•ญ์ƒ save() ๋ฐ update() ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค .

update() ๋ฉ”์†Œ๋“œ ์™€ ๋‹ฌ๋ฆฌ ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ๋•Œ ํ• ๋‹น๋œ ID๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:

User user = new User();
user.setName("Kolyan");
session.saveOrUpdate(user);   //object will be written to the database

์ž‘๋™ ๋ฐฉ์‹:

  • ์ „๋‹ฌ๋œ ๊ฐœ์ฒด์— ID๊ฐ€ ์žˆ์œผ๋ฉด UPDATE SQL ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • ์ „๋‹ฌ๋œ ๊ฐœ์ฒด์˜ ID๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ INSERT SQL ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION