{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":654919457,"defaultBranch":"main","name":"jpa-entity-manager","ownerLogin":"next-step","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-06-17T10:30:51.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/25274995?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1710134593.0","currentOid":""},"activityList":{"items":[{"before":"645c75dc95b5ffc57401a0a5e7996bb4b0facf2f","after":"c86b88ec8d7d5af4cd33cc0b95c27c060b0c9b53","ref":"refs/heads/jurlring","pushedAt":"2024-03-27T09:52:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwee0330","name":null,"path":"/jwee0330","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/54702844?s=80&v=4"},"commit":{"message":"[๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry] ์œค์ฃผ๋ฆฌ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#182)\n\n* docs: step4 ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* feature: status ๊ฐ’ ์ถ”๊ฐ€\r\n\r\n* feature: EntityEntry ์ถ”๊ฐ€\r\n\r\n* feature: ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ\r\n\r\n* feature: MANAGED ์ƒํƒœ ๊ตฌํ˜„\r\n\r\n* feature: SAVING ์ƒํƒœ ๊ตฌํ˜„\r\n\r\n* feature: LOADING ์ƒํƒœ ๊ตฌํ˜„\r\n\r\n* feature: DELETE, GONE ์ƒํƒœ ๊ตฌํ˜„\r\n\r\n---------\r\n\r\nCo-authored-by: jurlring ","shortMessageHtmlLink":"[๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry] ์œค์ฃผ๋ฆฌ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#182)"}},{"before":"3b138b60d134c2821d700f253a80b78536cab8bf","after":"645c75dc95b5ffc57401a0a5e7996bb4b0facf2f","ref":"refs/heads/jurlring","pushedAt":"2024-03-23T05:50:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwee0330","name":null,"path":"/jwee0330","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/54702844?s=80&v=4"},"commit":{"message":"[๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#180)\n\n* docs: step3 ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* docs: step3 ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* docs: step3 ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* docs: addEntity ๊ตฌํ˜„\r\n\r\n* docs: getEntity ๊ตฌํ˜„\r\n\r\n* docs: removeEntity ๊ตฌํ˜„\r\n\r\n* docs: snapshot ๋งŒ๋“ค๊ธฐ ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* feature: getDatabaseSnapshot ๊ตฌํ˜„\r\n\r\n* feature: 1์ฐจ ์บ์‹œ์—์„œ ์กฐํšŒํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 3 ๋‚ด์šฉ ์ถ”๊ฐ€\r\n\r\n* feature: dirty check ์ถ”๊ฐ€\r\n\r\n* feature: merge ์‹œ 1์ฐจ ์บ์‹œ์—๋„ ์ €์žฅํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: 1์ฐจ ์บ์‹œ ์ด์šฉํ•˜์—ฌ dirty checking ํ•˜๋„๋ก ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •\r\n\r\n* feature: persist ํ•  ๋•Œ ๊ธฐ์กด ์—”ํ‹ฐํ‹ฐ์— id ๊ฐ’์„ ์ฃผ์ž…ํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: ๊ฐœํ–‰ ์ถ”๊ฐ€\r\n\r\n* feature: inject ๋ฉ”์„œ๋“œ์—์„œ exception ์žก๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: snapshot์— ๊ฐ์ฒด ๊ฐ’๋ณต์‚ฌํ•ด์„œ ๋„ฃ๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: PersistenceContext ์—์„œ object ์ œ๋„ค๋ฆญ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: entity metadata ๋ฝ‘๋Š” ํด๋ž˜์Šค๋ช… ๋ฐ ๋ฉ”์„œ๋“œ๋ช… ๋ณ€๊ฒฝ\r\n\r\n* feature: ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •\r\n\r\n---------\r\n\r\nCo-authored-by: jurlring ","shortMessageHtmlLink":"[๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#180)"}},{"before":"89769642304d6d91bfe40e89ce34c5ffe85f64d6","after":"f11cc2a29975667ac96dfffa3061449af86d254f","ref":"refs/heads/joel-you","pushedAt":"2024-03-19T00:08:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ghojeong","name":"JeongWan Gho","path":"/ghojeong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/38595650?s=80&v=4"},"commit":{"message":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#181)\n\n* docs(README): ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* feat(EntityEntry): EntityEntry ๊ตฌํ˜„\r\n\r\n- EntityStatus ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก EntityEntry ๊ตฌํ˜„\r\n\r\n* feat(EntityEntry): EntityEntry ๊ตฌํ˜„\r\n\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ถ”๊ฐ€\r\n\r\n* refactor(EntityKey): EntityId to EntityKey๋กœ ๋ณ€๊ฒฝ\r\n\r\n* refactor(SimpleEntityManager): ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ๋ฐ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ˆ˜์ •.\r\n\r\n- merge ์‹œ Database ์กฐํšŒํ•˜๋„๋ก ๋ณ€๊ฒฝ.\r\n- ๊นจ์ง€๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ˆ˜์ •\r\n- DeleteQueryBuilder ์— WhereClause ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ.\r\n\r\n* refactor(EntityKey): EntityId to EntityKey๋กœ ๋ณ€๊ฒฝ\r\n\r\n* refactor: ๋ฆฌ๋ทฐ ๋ฐ˜์˜\r\n\r\n- EntityKey ์˜ getName ์ œ๊ฑฐ\r\n- EntityKey์˜ Caller ์ชฝ์—์„œ GetName ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„ ๋ฆฌํŒฉํ„ฐ๋ง\r\n- CUD ์—์„œ ReadOnly ์‹œ ์ œ์–ด ์•ˆ๋˜๋„๋ก ๋ณ€๊ฒฝ\r\n\r\n* refactor(EntityKey): PR ๋ฆฌ๋ทฐ ๋ฐ˜์˜\r\n\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๋ณด๊ฐ•","shortMessageHtmlLink":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#181)"}},{"before":"595506d4ac64566ce75c977ea2e3ad40258a2a4c","after":"5a0dcf2f39e3d36c775ff4a55ff7ad536eba7d47","ref":"refs/heads/joydaheecha","pushedAt":"2024-03-18T13:04:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jongmin4943","name":"Jongmin Yoon","path":"/jongmin4943","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/77711322?s=80&v=4"},"commit":{"message":"4๋‹จ๊ณ„ - EntityEntry (#179)\n\n* (adjust) merge ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€, entity์™€ snpashot์€ ๋‹ค๋ฅผ๋•Œ ๊ฐ’ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ๋ฒ„๊ทธ ํ”ฝ์Šค\r\n\r\n* (adjust) snapshot ๋ฆฌํ„ด์‹œ optional์„ ์ œ๊ฑฐํ•˜๋ผ.\r\n\r\n* (adjust) remove ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ entityKey๋ฅผ ์ „๋‹ฌํ•˜๋ผ\r\n\r\n* (adjust) ์‹ค์ œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์„ ๋•Œ๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ผ\r\n\r\n* (adjust) updateEntity์—์„œ entityCache์—๋„ ๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค.\r\n\r\n* (adjust) addEntity์—์„œ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋กœ id๋ฅผ ๋„˜๊ธด๋‹ค.\r\n\r\n* (adjust) entityLoader.find์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐ์ฒด๋Š” ๋งค๋ฒˆ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ์—์„œ ๋Œ€์ƒ์—์„œ ์ œ๊ฑฐํ•˜๋ผ\r\n\r\n* (adjust) primaryKey๋กœ ํด๋ž˜์Šค ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ ํ•˜๋ผ / ํŒจํ‚ค์ง€ ์œ„์น˜ ์ด๋™ํ•˜๋ผ / static ๋ฉ”์„œ๋“œ ๋Œ€์‹  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ํ™”ํ•˜๋ผ\r\n\r\n* (feat) entityEntry ์ถ”๊ฐ€ํ•˜๋ผ\r\n\r\n* (test) ๊ตฌํ˜„ ๋ˆ„๋ฝํ–ˆ๋˜ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€\r\n\r\n* (test) softAssertions ์ž˜๋ชป ์‚ฌ์šฉ๋˜๋˜ ๋ถ€๋ถ„ ๊ต์ฒดํ•˜๋ผ\r\n\r\n* (feature) EntityEntry add, get ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ํ•˜๋ผ\r\n\r\n* (test) entityEntry ์ดˆ๊ธฐํ™” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€\r\n\r\n* (refactor) ๋„ค์ด๋ฐ ๋ณ€๊ฒฝํ•˜๋ผ\r\n\r\n* (refactor) EntityEntry๋ฅผ EntityManager์—์„œ ์‚ฌ์šฉํ•˜๋ผ\r\n\r\n* (refactor) format ์ ์šฉ\r\n\r\n* (docs) ์งˆ๋ฌธ์„ readme์—์„œ ์ œ๊ฑฐ\r\n\r\n* (adjust) id๊ฐ’์„ primaryKey์—์„œ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•˜๋ผ\r\n\r\n* (fix) remove ๋‘๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ํ˜„์ƒ ์ˆ˜์ •ํ•˜๋ผ\r\n\r\n* (adjust) update์‹œ saving, manage ์ƒํƒœ ์ ์šฉํ•˜๋ผ\r\n\r\n* (adjust) addEntity ์ „์— LOADING ์ƒํƒœ๋ฅผ ๋„ฃ์–ด๋ผ\r\n\r\n* (adjust) persist์‹œ SAVING์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ผ\r\n\r\n* (adjust) PrimaryKey ์ดˆ๊ธฐํ™” ๋กœ์ง ๋‹จ์ˆœํ™”\r\n\r\n* (adjust) ์—…๋ฐ์ดํŠธ์‹œ cache๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  snapshot๋งŒ ๋ณ€๊ฒฝํ•˜์—ฌ๋ผ\r\n\r\n* (refactor) dirtyChecking ๋กœ์ง์„ SnapShot ์—๊ฒŒ ๋งก๊ฒจ๋ผ\r\n\r\n* (adjust) persistenceContext์—์„œ entityEntry์˜ ์„ธ๋ถ€ ๋กœ์ง์„ ์ œ๊ฑฐํ•˜๋ผ\r\n\r\n* (test) merge์‹œ ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ๊ฐ€ READ_ONLY์ด๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.\r\n\r\n---------\r\n\r\nCo-authored-by: daheecha0612 ","shortMessageHtmlLink":"4๋‹จ๊ณ„ - EntityEntry (#179)"}},{"before":"386052250b47e6fee8b1d2dbee1ad06c763fab8f","after":"f5d2cc012896e138c6eca7c537015c0d687f56eb","ref":"refs/heads/qwe5507","pushedAt":"2024-03-17T11:54:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"leeyohan93","name":"yohan","path":"/leeyohan93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/44187892?s=80&v=4"},"commit":{"message":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#170)\n\n* docs: ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ\r\n\r\n* feat: Status ์ƒ์„ฑ\r\n\r\n* feat: EntityEntry ๊ตฌํ˜„\r\n\r\n* feat: persist() Saving ๋ฐ Managed ์ƒํƒœ ๊ตฌํ˜„\r\n\r\n* feat: persist()ํ• ์ˆ˜ ์—†๋Š” ์ƒํƒœ ์ผ๋•Œ ์˜ˆ์™ธ ์ถ”๊ฐ€\r\n\r\n* feat: merge() status ๊ตฌํ˜„\r\n\r\n* feat: remove() status ๊ตฌํ˜„\r\n\r\n* feat: find() status๊ตฌํ˜„\r\n\r\n* feat: Gone ์˜ˆ์™ธ ์ผ€์ด์Šค ์ถ”๊ฐ€\r\n\r\n* feat: [step4ํ”ผ๋“œ๋ฐฑ๋ฐ˜์˜] persist ์˜ˆ์™ธ์ผ€์ด์Šค checkDetachedEntity, checkExistEntity ์ถ”๊ฐ€\r\n\r\n* feat: [step4ํ”ผ๋“œ๋ฐฑ๋ฐ˜์˜] merge ์˜ˆ์™ธ์ผ€์ด์Šค ๋ณ€๊ฒฝ","shortMessageHtmlLink":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#170)"}},{"before":"6427dcc75f5be126d1a40342ba215c80fc59ded6","after":"6489151c2f68b6f9855e2bfcdd803ecb42db1df5","ref":"refs/heads/eunjinjwa","pushedAt":"2024-03-16T16:31:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwee0330","name":null,"path":"/jwee0330","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/54702844?s=80&v=4"},"commit":{"message":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#176)\n\n* step4 ์ค€๋น„\r\n\r\n* ์š”๊ตฌ์‚ฌํ•ญ ์ ์šฉ\r\n\r\n* persistenceContext ์ธ์ž๊ฐ’์„ EntityKey ๋กœ ๋ณ€๊ฒฝ\r\n\r\n* ์š”๊ตฌ์‚ฌํ•ญ ์ ์šฉ ๋ณด์™„\r\n\r\n* persistenceContext ์ดˆ๊ธฐํ™”","shortMessageHtmlLink":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#176)"}},{"before":"0f01adae4d4f08750eb9543ae40cedb8caca1c5d","after":"204b285391a694588119557e6afdfe7374f1acce","ref":"refs/heads/rolroralra","pushedAt":"2024-03-16T11:36:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"wooobo","name":"wooobo","path":"/wooobo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12059592?s=80&v=4"},"commit":{"message":"feat: 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#178)\n\n* feat: code-review ๋ฐ˜์˜\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ1 - PersistenceContext ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  1์ฐจ ์บ์‹ฑ์„ ์ ์šฉํ•ด๋ณด์ž\r\n\r\n- ์š”๊ตฌ์‚ฌํ•ญ1 - PersistenceContext ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  1์ฐจ ์บ์‹ฑ์„ ์ ์šฉํ•ด๋ณด์ž\r\n- ์š”๊ตฌ์‚ฌํ•ญ2 - snapshot ๋งŒ๋“ค๊ธฐ\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ3 - ๋”ํ‹ฐ์ฒดํ‚น ๊ตฌํ˜„\r\n\r\n---------\r\n\r\nCo-authored-by: socar-shinyoung ","shortMessageHtmlLink":"feat: 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#178)"}},{"before":"d592af00cf55f21aea2cc32635f80b7e2c65e572","after":"89769642304d6d91bfe40e89ce34c5ffe85f64d6","ref":"refs/heads/joel-you","pushedAt":"2024-03-15T23:34:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ghojeong","name":"JeongWan Gho","path":"/ghojeong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/38595650?s=80&v=4"},"commit":{"message":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#175)\n\n* docs(README.md): ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ\r\n\r\n* refactor(EntityId.java): PR ๋ฆฌ๋ทฐ ์ ์šฉ\r\n\r\n- EntityId ๊ตฌํ˜„\r\n- EntityLoader ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •\r\n\r\n* feat(PersistenceContext): PersistenceContext ๊ตฌํ˜„ํ•˜์—ฌ ์บ์‹ฑ ์ฒ˜๋ฆฌํ•˜๋„๋ก\r\n\r\n- PersistenceContextImpl ๊ตฌํ˜„์ฒด ๊ตฌํ˜„\r\n- ํƒ€ ์ปดํ“จํ„ฐ๋กœ ์ž‘์—…ํ•˜๊ธฐ์œ„ํ•ด ์ž„์‹œ ์ปค๋ฐ‹\r\n\r\n* feat(SimplePersistenceContext): ์š”๊ตฌ์‚ฌํ•ญ1 - PersistenceContext ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  1์ฐจ ์บ์‹ฑ์„ ์ ์šฉํ•ด๋ณด์ž\r\n\r\n- SimplePersistenceContext ๊ตฌํ˜„\r\n- EntityId ์ •์ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ๋กœ ๋ณ€๊ฒฝ\r\n-\r\nSimpleEntityManager ์—์„œ ์บ์‹ฑ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •\r\n\r\n* docs(README.md): ์š”๊ตฌ์‚ฌํ•ญ 1 ์ฒดํฌ\r\n\r\n* feat(SimplePersistenceContext): ์š”๊ตฌ์‚ฌํ•ญ2 - snapshot ๋งŒ๋“ค๊ธฐ\r\n\r\n- snapshot ๊ตฌํ˜„\r\n- snapshot ๊ณผ ํ˜„์žฌ entity ๋น„๊ตํ•˜๋Š” ๋กœ์ง ์ถ”๊ฐ€\r\n- ์ž˜๋ชป๋œ ๋ฉ”์„œ๋“œ๋ช… ์ˆ˜์ •.\r\n\r\n* feat(PersistenceContext): ์š”๊ตฌ์‚ฌํ•ญ3 - ๋”ํ‹ฐ์ฒดํ‚น ๊ตฌํ˜„\r\n\r\n- Dirty checking ํ•˜์—ฌ ๋ณ€๊ฒฝ๋‚ด์—ญ์„ ๊ฐ์ง€ ํ›„ merge ํ•˜๋„๋ก ๊ตฌํ˜„\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ถ”๊ฐ€\r\n- ์ „๋ฐ˜์ ์ธ ๋ฆฌํŒฉํ† ๋ง\r\n\r\n* docs(README.md): ์š”๊ตฌ์‚ฌํ•ญ ์ฒดํฌ\r\n\r\n* refactor: PR๋ฆฌ๋ทฐ ์ ์šฉ\r\n\r\n- id ๋งคํ•‘ํ•˜๋Š” ๋กœ์ง์ด ๋ˆ„๋ฝ๋˜์–ด ์ถ”๊ฐ€ํ•จ\r\n- ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€\r\n- DisplayName ๋ณ€๊ฒฝ","shortMessageHtmlLink":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#175)"}},{"before":"db737a35e928d239c654b7b905f197d5081e474b","after":"11cdb86acea02a7c640187e4eb81d74643708859","ref":"refs/heads/djawnstj","pushedAt":"2024-03-15T11:48:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jongmin4943","name":"Jongmin Yoon","path":"/jongmin4943","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/77711322?s=80&v=4"},"commit":{"message":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#177)\n\n* refactor: EntitySnapshot isSame ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ\r\n\r\nEntitySnapshot ์—์„œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ\r\n๋ณ€๊ฒฝ์ ์ด ์—†๋Š”์ง€(isSame) ์—์„œ ๋ณ€๊ฒฝ์ง์ด ์žˆ๋Š”์ง€(checkDirty) ๋กœ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.\r\n\r\n* refactor: EntitySnapshots compareWithSnapshot ๋ฉ”์„œ๋“œ ์‚ญ์ œ\r\n\r\n* refactor: EntityKey ์ œ๋„ค๋ฆญ ์‚ญ์ œ\r\n\r\n* feat: EntityEntry ๊ฐœ๋ฐœ\r\n\r\n์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ์—ญํ• ์„ ํ•˜๋Š” EntityEntry ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n\r\n* feat: EntityEntryContext ๊ฐœ๋ฐœ\r\n\r\nEntityEntry ๋ฅผ Map ์œผ๋กœ ๊ฐ€์ง€๋Š” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์ธ EntityEntryContext ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\nPersistenceContext ์—์„œ EntityEntryContext ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ด EntityEntry ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.\r\n\r\n* feat: EntityManager ์—”ํ‹ฐํ‹ฐ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐœ๋ฐœ\r\n\r\n* feat: EntityManager remove ๋ฉ”์„œ๋“œ ์—”ํ‹ฐํ‹ฐ ์ƒํƒœ ๊ด€๋ฆฌ ์ˆ˜์ •\r\n\r\nEntityManager ์—์„œ remove ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ\r\nEntityEntry ๊ฐ€ READ_ONLY ๋ผ๋ฉด ์‚ญ์ œ๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ–ˆ๋‹ค.","shortMessageHtmlLink":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#177)"}},{"before":"b352ddfbb4bc44e3c0d0f2586b1d8ebc4bd60375","after":"dee824266672fbdf752373400f5e5b1a11a0bedf","ref":"refs/heads/parkje0927","pushedAt":"2024-03-15T05:58:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"liquidjoo","name":"liquidjoo","path":"/liquidjoo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7530347?s=80&v=4"},"commit":{"message":"[Entity ๊ตฌํ˜„ - Step 4๋‹จ๊ณ„] EntityEntry (#172)\n\n* test: step4 - ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜์—ฌ ํด๋ž˜์Šค ๋ฆฌํŒฉํ† ๋ง, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •\r\n\r\n* feat: step4 - EntityEntry ํด๋ž˜์Šค ์ถ”๊ฐ€ ๋ฐ ๋กœ์ง ์ˆ˜์ •\r\n\r\n* feat: step4 - EntityManager ๋‚ด EntityEntry ์˜์กด์„ฑ ์ฃผ์ž… ์ถ”๊ฐ€\r\n\r\n* chore: step4 - ๋ถˆํ•„์š”ํ•œ ์ถœ๋ ฅ๋ฌธ ์‚ญ์ œ\r\n\r\n* test: step4 - ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •\r\n\r\n* docs: step4 - ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ ์ถ”๊ฐ€","shortMessageHtmlLink":"[Entity ๊ตฌํ˜„ - Step 4๋‹จ๊ณ„] EntityEntry (#172)"}},{"before":"f9c4a4a54699031607996257eee5877150387b5d","after":"0f01adae4d4f08750eb9543ae40cedb8caca1c5d","ref":"refs/heads/rolroralra","pushedAt":"2024-03-15T02:33:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"wooobo","name":"wooobo","path":"/wooobo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12059592?s=80&v=4"},"commit":{"message":"feat: 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#174)\n\n* feat: code-review ๋ฐ˜์˜\r\n\r\n- https://github.com/next-step/jpa-entity-manager/pull/173#discussion_r1524045173\r\n - EntityColumns์— ์žˆ๋Š” ์ฟผ๋ฆฌ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ UpdateQueryBuilder ๋กœ ์—ญํ•  ์ด๋™\r\n\r\n* feat: 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader)\r\n\r\n---------\r\n\r\nCo-authored-by: socar-shinyoung ","shortMessageHtmlLink":"feat: 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#174)"}},{"before":"50a65f79443a4dff13118f8fd86f92d62de32320","after":"595506d4ac64566ce75c977ea2e3ad40258a2a4c","ref":"refs/heads/joydaheecha","pushedAt":"2024-03-14T17:38:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jongmin4943","name":"Jongmin Yoon","path":"/jongmin4943","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/77711322?s=80&v=4"},"commit":{"message":"3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#165)\n\n* (adjust) EOL ์ ์šฉ\r\n\r\n* (adjust) ์ ‘๊ทผ ์ œ์–ด์ž ์ ์šฉํ•˜๋ผ\r\n\r\n* (adjust) ํด๋ž˜์Šค์˜ ๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜์ •ํ•˜๋ผ\r\n\r\n* (feat) 1์ฐจ ์บ์‹ฑ ์ ์šฉ\r\n\r\n* (modify) ์บ์‹ฑ ๊ฐ์ฒด์˜ ํ‚ค๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค ์ถ”๊ฐ€ํ•˜๋ผ.\r\n\r\n* (feat) snapshot์„ ๊ตฌํ˜„ํ•˜์—ฌ๋ผ\r\n\r\n* (feat) dirty checking์„ ๊ตฌํ˜„ํ•˜์—ฌ๋ผ\r\n\r\n* (refactor) test์ฝ”๋“œ์˜ when ์ ˆ์„ given์œผ๋กœ ์ด๋™ํ•˜๋ผ\r\n\r\n* (refactor) ๋ถˆํ•„์š”ํ•œ ์ƒ์„ฑ์ž ์ œ๊ฑฐํ•˜๋ผ\r\n\r\n* (test) ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •ํ•˜๋ผ\r\n\r\n* (refactor) ํŒจํ‚ค์ง€ ์œ„์น˜ ์ด๋™\r\n\r\n* (test) ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •ํ•˜๋ผ\r\n\r\n* (refactor) ์ปค์Šคํ…€ ์ต์…‰์…˜ ์ถ”๊ฐ€ํ•˜๋ผ\r\n\r\n* (modify) persist๋Š” entityManager์— ์—†๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐ˜๋ฉด, merge๋Š” entityManager์— ์žˆ๋Š” ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.\r\n\r\n* (adjust) ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ ๋Œ€์‹  ์ธ๋ผ์ธ ๋ฉ”์„œ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๋ผ\r\n\r\n* (adjust) todo ์ œ๊ฑฐ\r\n\r\n* (adjust) entityKey์—์„œ className์€ ํ’€๋„ค์ž„์ด๋‹ค.\r\n\r\n* (adjust) ๋ฏธ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ ์‚ญ์ œ\r\n\r\n* (adjust) put ๋ฉ”์„œ๋“œ๋ฅผ ์ผ์›ํ™”ํ•˜๋ผ (ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ object์ด๋ฏ€๋กœ ์‹ค์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.)\r\n\r\n* (adjust) persistenceContext์— ๋„ฃ์€ ๊ฐ์ฒด๋Š” ๋„ฃ์€ ๊ฐ’๊ณผ ๋™์ผํ•ด์•ผํ•œ๋‹ค. EntityCache๊ฐ€ nullcheck๋ฅผ ํ•˜๋„๋ก ์ฑ…์ž„ ๋„˜๊ธด๋‹ค.\r\n\r\n* (adjust) CustomJpaRepository์—์„œ save๋ฅผ ํ˜ธ์ถœ์‹œ, ์ด๋ฏธ ์•„์ด๋””๊ฐ€ ์žˆ๋Š” entity๋Š” ์—…๋ฐ์ดํŠธํ•œ๋‹ค.\r\n\r\n* (adjust) update์‹œ์—๋Š” ๋ฐ›์€ entity๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  insert ์‹œ์—๋Š” generatedKey๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ entity๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.\r\n\r\n* (refactor) ๋ฏธ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ\r\n\r\n* (refactor) findAll ๋Œ€์‹  generatedKey ์‚ฌ์šฉํ•˜์—ฌ insert๋œ ๊ฐ’ ๋„์ถœํ•˜๋ผ.\r\n\r\n* (refactor) ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œ ์ œ๊ฑฐํ•˜๋ผ\r\n\r\n* (refactor) PersistenceContext์— ์ €์žฅํ•œ ๊ฐ์ฒด๋Š” ๋ฐ˜ํ™˜ํ•  ๋•Œ๋งˆ๋‹ค ์ฃผ์†Œ๊ฐ’์ด ๋™์ผํ•ด์•ผํ•œ๋‹ค.\r\n\r\n* (adjust) PrimaryKeyValueGenerator ๋กœ PK ๊ฐ’ ์ƒ์„ฑ ์ฑ…์ž„ ๋ถ„๋ฆฌ\r\n\r\n* (adjust) ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ด๊ฐ’์˜ ํƒ€์ž…์ด ๋™์ผํ•จ์„ ๋“œ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•ด generic์„ ์‚ฌ์šฉํ•˜์—ฌ๋ผ\r\n\r\n* (adjust) ๋ฏธ์‚ฌ์šฉ ์ƒ์„ฑ์ž ์ œ๊ฑฐ\r\n\r\n* (adjust) ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— softAssertions ์ ์šฉ\r\n\r\n* (adjust) var ํ‚ค์›Œ๋“œ ๋Œ€์‹  ๋ฆฌํ„ด ํƒ€์ž…์„ ๋ช…์‹œํ•œ๋‹ค.\r\n\r\n* (fix) persistContext์— ๊ฐ’์„ ๋„ฃ์„ ๋•Œ optional์„ ๋„ฃ์œผ๋ฉด ์•ˆ๋œ๋‹ค.\r\n\r\n* (refactor) ๋ถˆํ•„์š”ํ•œ ํƒ€์ž…์บ์ŠคํŒ… ์ œ๊ฑฐ\r\n\r\n* (adjust) ์˜ค๋ฒ„๋กœ๋”ฉ ์ œ๊ฑฐ\r\n\r\n* (adjust) snapshot์ด ์—†์„ ๊ฒฝ์šฐ entityLoader์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค.\r\n\r\n* (fix) ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ˆ˜์ •ํ•˜๋ผ\r\n\r\n* (fix) ์—…๋ฐ์ดํŠธ ํ•„์š” ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค๋ฉด ์ฃผ์†Œ๊ฐ’ ๋Œ€์‹  ๊ฐ’ ๋น„๊ต๋ฅผ ํ•ด์•ผํ•œ๋‹ค.\r\n\r\n* (adjust) entityKey ์ƒ์„ฑ ์ฑ…์ž„์„ PersistenceContext๋กœ ์‘์ง‘์‹œ์ผœ๋ผ\r\n\r\n* (adjust) PrimaryKeyValue ํด๋ž˜์Šค๋กœ ์ฑ…์ž„ ๋ถ„๋ฆฌํ•˜๋ผ, Class ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋Š” clazz๋กœ ์žฌ๋ช…๋ช…ํ•˜๋ผ\r\n\r\n* (refactor) ๋ฉ”์„œ๋“œ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ\r\n\r\n* (refactor) ์ ‘๊ทผ์ œ์–ด์ž ๋ณ€๊ฒฝ\r\n\r\n* (refactor) ํŒจํ‚ค์ง€ ์ด๋™\r\n\r\n* (refactor) ํŒจํ‚ค์ง€ ์ด๋™\r\n\r\n* (refactor) entity์˜ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” columnSpec ๋ถ„๋ฆฌ\r\n\r\n---------\r\n\r\nCo-authored-by: daheecha0612 ","shortMessageHtmlLink":"3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#165)"}},{"before":"9abed72cad31034d970695989d1f9ae24b4dbe2b","after":"f9c4a4a54699031607996257eee5877150387b5d","ref":"refs/heads/rolroralra","pushedAt":"2024-03-14T00:22:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"wooobo","name":"wooobo","path":"/wooobo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12059592?s=80&v=4"},"commit":{"message":"feat: 1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister) (#173)\n\n* feat: Metadata ๊ตฌํ˜„\r\n\r\n- Metadata\r\n- EntityTable\r\n- EntityColumns\r\n- EntityColumn\r\n- EntityColumnValues\r\n- EntityColumnValue\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ 1 - ์—”ํ„ฐํ‹ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘, ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ 2 - EntityManager ์˜ ์ฑ…์ž„ ์ค„์—ฌ์ฃผ๊ธฐ\r\n\r\n- TODO: Metadata๋ฅผ ํ™œ์šฉํ•ด์„œ QueryBuilder ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์˜์กด์„ฑ ์ค„์ด๊ธฐ\r\n\r\n---------\r\n\r\nCo-authored-by: socar-shinyoung ","shortMessageHtmlLink":"feat: 1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister) (#173)"}},{"before":"fbdfdf63f0046acd969550eae86e55e73a5ba99c","after":"6427dcc75f5be126d1a40342ba215c80fc59ded6","ref":"refs/heads/eunjinjwa","pushedAt":"2024-03-13T14:22:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwee0330","name":null,"path":"/jwee0330","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/54702844?s=80&v=4"},"commit":{"message":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#163)\n\n* ์š”๊ตฌ์‚ฌํ•ญ1 ์ž‘์„ฑ\r\n\r\n* step3 ์š”๊ตฌ์‚ฌํ•ญ2 ์ž‘์—…์ค‘\r\n\r\n* dirtyCheck ๊ตฌํ˜„\r\n\r\n* ์š”๊ตฌ์‚ฌํ•ญ3 ์ ์šฉ\r\n\r\n* ์ฝ”๋“œ ์ •๋ฆฌ\r\n\r\n* feedback ๋ฐ˜์˜","shortMessageHtmlLink":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#163)"}},{"before":"1b89c897ff077d2a0c0f5bff0500e58a031110b2","after":"db737a35e928d239c654b7b905f197d5081e474b","ref":"refs/heads/djawnstj","pushedAt":"2024-03-13T13:43:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jongmin4943","name":"Jongmin Yoon","path":"/jongmin4943","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/77711322?s=80&v=4"},"commit":{"message":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#166)\n\n* refactor: EntityLoader, EntityPersister ํŒจํ‚ค์ง€ ์ด๋™\r\n\r\nEntityLoader ์™€ EntityPersister ์˜ ํŒจํ‚ค์ง€๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค.\r\n\r\n* feat: EntityPersister ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์—ฐ๊ด€๋œ ํด๋ž˜์Šค ๊ฐœ๋ฐœ\r\n\r\nEntityPersister ๋ฅผ ์—”ํ„ฐํ‹ฐ ๋‹น ํ•œ๊ฐœ์”ฉ ์ƒ์„ฑ/๋งคํ•‘ํ•˜๊ณ ,\r\n์š”์ฒญ ์‹œ ์ ์ ˆํ•œ EntityPersister ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n\r\n* refactor: EntityLoader ํŒจํ‚ค์ง€ ์ด๋™\r\n\r\nEntityLoader ์˜ ํŒจํ‚ค์ง€๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค.\r\n\r\n* feat: EntityIdentifierMapping ๊ฐœ๋ฐœ\r\n\r\n์—”ํ„ฐํ‹ฐ ๋ณ„ ์‹๋ณ„ํ‚ค๋กœ ์‚ฌ์šฉํ•  ๊ฐ์ฒด ๋ณด๊ด€, ๋ฐ˜ํ™˜ ํ•  ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\nํ˜„์žฌ๋Š” SingleTableEntityPersister ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด getIdField() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹๋ณ„ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ  ๋ณด๊ด€ํ•˜์ง€๋งŒ,\r\n4์ฃผ์ฐจ ๋ฏธ์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋ฉด ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ EntityPersister ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์‹๋ณ„ ๊ฐ์ฒด๋„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•œ๋‹ค.\r\n\r\n* feat: EntityPErsister ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ\r\n\r\n์—”ํ„ฐํ‹ฐ ๋ณ„ ์‹๋ณ„ํ‚ค๋กœ ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ์œ„ํ•ด getIdentifier() ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.\r\n\r\n* feat: MetaDataModelMappingException ์˜ˆ์™ธ ํด๋ž˜์Šค ์ถ”๊ฐ€\r\n\r\n* feat: PrimaryKey ํด๋ž˜์Šค hasIdentifierKey ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€\r\n\r\nEntityPersister ์—์„œ insert() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ\r\n@Id ํ•„๋“œ๊ฐ€ GenerationType.IDENTITY ์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ\r\njdbcTemplate ์—์„œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด PrimaryKey ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.\r\n\r\n* feat: JdbcTemplate ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€\r\n\r\ninsert ์ฟผ๋ฆฌ์—์„œ GenerationType.IDENTITY ์—”ํ„ฐํ‹ฐ์˜ ๊ฒฝ์šฐ ์ƒ์„ฑ๋œ pk ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๊ธฐ ์œ„ํ•ด executeWithGeneratedKey() ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.\r\n\r\n* feat: PersistenceContext ๊ฐœ๋ฐœ\r\n\r\n์—”ํ„ฐํ‹ฐ๋ฅผ persist ํ•  ๊ฒฝ์šฐ 1์ฐจ ์บ์‹œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด\r\nPersistenceContext ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด๋กœ StatefulPersistenceContext ์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ํด๋ž˜์Šค์—์„ \r\nMap ์„ ํ†ตํ•ด ์—”ํ„ฐํ‹ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์—ญํ• ๋กœ PersistenceCache ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n์—”ํ„ฐํ‹ฐ๋ฅผ ์ €์žฅํ•˜๋Š” Map ์˜ key ๋Š”\r\nEntityPersister ์—์„œ ๊ฐ–๊ณ ์žˆ๋Š” Identifier ์™€ ์—”ํ„ฐํ‹ฐ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ฐ€์ง„ EntityKey ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.\r\n\r\n* feat: EntityManager 1์ฐจ ์บ์‹œ ์ ์šฉ\r\n\r\n* refactor: EntityIdentifierMapping ํด๋ž˜์Šค setIdentifier ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ\r\n\r\nsetIdentifier ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฑฐํ•˜์˜€๋‹ค.\r\n\r\n* refactor: MappingMetaModel ํด๋ž˜์Šค ์ƒ์„ฑ์ž ์ˆ˜์ •\r\n\r\nํ˜„์žฌ ๋‹จ๊ณ„์—์„  ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์œผ๋กœ EntityPersister ๋“ฑ๋กํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—\r\n์ž„์‹œ๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ†ตํ•ด ๋“ฑ๋กํ•ด์ฃผ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.\r\n\r\n* test: PersonV3FixtureFactory ํด๋ž˜์Šค ๋ถ„๋ฆฌ\r\n\r\n* test: PersonV3FixtureFactory ํด๋ž˜์Šค ๋ถ„๋ฆฌ\r\n\r\n* test: SimpleEntityManager, SingleTableEntityPersister ์˜์กด์„ฑ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •\r\n\r\n* test: EntityIdentifierMappingTest ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* test: MappingMetaModelTest ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* test: PersistenceCacheTest ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* test: PersistenceContextTest ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* feat: EntityMetaData ๊ฐœ๋ฐœ\r\n\r\n์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋“ค์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” EntityMetaData ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n์ถ”ํ›„ 4์ฃผ์ฐจ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋ฏธ์…˜ ๋•Œ ๋™์ ์œผ๋กœ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์˜ˆ์ •์ด๋‹ค.\r\n\r\n* feat: ๊ธฐ์กด ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ์ค‘์ด๋˜ ๋ฆฌํ”Œ๋ ‰์…˜ ์ฝ”๋“œ๋ฅผ EntityMetaData ๋กœ ๋ณ€๊ฒฝ\r\n\r\n* feat: EntityIdentifierMapping ์—์„œ setIdentifier ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€\r\n\r\n์—”ํ‹ฐํ‹ฐ๋ฅผ persist ํ›„ identifier ๊ฐ’์— ์ƒ์„ฑ๋œ ๊ฐ’์„ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด\r\nsetIdentifier ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.\r\n\r\n* feat: EntitySnapshot ๊ฐœ๋ฐœ\r\n\r\n์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๋”ํ‹ฐ์ฒดํ‚น์‹œ ์‚ฌ์šฉํ•  EntitySnapshot ์„ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n1์ฐจ ์บ์‹œ ์ž์ฒด๋ฅผ EntitySnapshot ์œผ๋กœ ์ €์žฅํ•˜๊ณ ,\r\n์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ getEntity ๋ฉ”์„œ๋“œ๋กœ ์ €์žฅ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐพ์„ ๋•Œ๋งˆ๋‹ค\r\nEntitySnapshot ์„ Entity ๊ฐ์ฒด๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์ด์šฉํ•œ ๋ณ€ํ™˜์„ ํ•˜๋Š”๊ฒƒ์ด ์ข‹์€์ง€ ๊ณ ๋ฏผ์ค‘์ด๋‹ค.\r\n\r\n* feat: PersistenceContext ๋”ํ‹ฐ์ฒดํ‚น ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ\r\n\r\nPersistenceContext ์˜ EntitySnapshot ์„ ์ด์šฉํ•ด\r\n๋”ํ‹ฐ์ฒดํ‚น ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n\r\n* feat: EntityManager merge ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ\r\n\r\nEntityManager ์—์„œ ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์ธ merge ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.\r\n์‹ค์งˆ์ ์ธ update ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋”ํ‹ฐ์ฒดํ‚น์„ ํ†ตํ•ด\r\n๋ณ€๊ฒฝ์ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.\r\n\r\n* test: EntityMetaData ์ €์žฅ์„ ์œ„ํ•œ EntityMetaDataTestSupport ์ถ”๊ฐ€\r\n\r\nํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ „ EntityMetaData ์ •๋ณด๋“ค์„ ๋“ฑ๋ก์‹œํ‚ค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค.\r\n\r\n* test: EntitySnapshot, EntitySnapshots ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* test: EntityMetaData, EntityMetaDataMapping ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* test: PersonV3 ์„ธํ„ฐ ์ถ”๊ฐ€\r\n\r\n* test: SimpleEntityManagerTest merge ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€\r\n\r\n* test: PersistenceContextTest checkDirty ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€\r\n\r\n* test: EntityIdentifierMappingTest setIdentifier ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€\r\n\r\n* comment: TODO ์ฃผ์„ ์ œ๊ฑฐ\r\n\r\n* refactor: EntityIdentifierMapping, EntityMetaData ํด๋ž˜์Šค Field ๊ฐ์ฒด setAccessible() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์  ๋ณ€๊ฒฝ\r\n\r\nField ๊ฐ์ฒด๋ฅผ ์ฒ˜์Œ ์ฃผ์ž…ํ•  ๋•Œ accessible ์„ true ๋กœ ๋ณ€๊ฒฝํ•˜๋˜ ๋กœ์ง์—์„œ,\r\nField ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋งˆ๋‹ค accessible ์„ true ๋กœ ๋ณ€๊ฒฝ ํ›„ ํ•„์š”ํ•œ ์ž‘์—…์ด ์ข…๋ฃŒ ๋˜๋ฉด false ๋กœ ๋ณ€๊ฒฝ๋˜๊ฒŒ๋” ์ˆ˜์ •ํ•˜์˜€๋‹ค.\r\n\r\n* refactor: EntitySnapshot isSame ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ ์ฝ”๋“œ ๋ณ€๊ฒฝ\r\n\r\n๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™์— ๋งž์ถฐ isSame ๋ฉ”์„œ๋“œ์—์„œ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ 2๋Ž์Šค ์˜€๋˜ ์ฝ”๋“œ๋ฅผ\r\n1๋Ž์Šค๋กœ ์ˆ˜์ •ํ•˜์˜€๋‹ค.\r\n\r\n* refactor: MappingMetaModel getEntityDescriptor ๋ฉ”์„œ๋“œ ์ˆ˜์ •\r\n\r\n๊ธฐ์กด์—” key ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„๋งŒ์„ ๋ฐ›์•„ EntityPersister ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋˜ ์ฝ”๋“œ์—์„œ\r\nentity ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ํƒ€์ž… ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ ํ›„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜์˜€๋‹ค.\r\n์ด์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ์ˆ˜์ •๋˜์—ˆ๋‹ค.\r\n\r\n* feat: PersistenceContext getDatabaseSnapshot ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€, checkDirty ๋ฉ”์„œ๋“œ ์‚ญ์ œ\r\n\r\n๊ธฐ์กด์—๋Š” EntityManager ์—์„  PersistenceContext ์— checkDirty ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•ด ๋”ํ‹ฐ ์ฒดํฌ๋ฅผ ํ–ˆ๋Š”๋ฐ,\r\n์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ getDatabaseSnapshot ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  EntitySnapshot ์„ ๋ฐ˜ํ™˜๋ฐ›์•„ ๋”ํ‹ฐ ์ฒดํฌ ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค.","shortMessageHtmlLink":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#166)"}},{"before":"b2dd87408cbc077fc847bed44db344bbd10849a1","after":"b1601af61bfcee996f263d45cffc7eafd8673bb2","ref":"refs/heads/jaesungahn91","pushedAt":"2024-03-13T12:43:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jinyoungchoi95","name":"์ตœ์ง„์˜","path":"/jinyoungchoi95","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/69106910?s=80&v=4"},"commit":{"message":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#161)\n\n* docs: step4 ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜\r\n\r\n* fix, refactor: step3 ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ1. CRUD ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ ์—”ํ„ฐํ‹ฐ์˜ ์ƒํƒœ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„\r\n\r\n* fix, refactor: step4 ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜","shortMessageHtmlLink":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#161)"}},{"before":"1cc28fec7cccb49cf296fc0526f76896e6e164c3","after":"d592af00cf55f21aea2cc32635f80b7e2c65e572","ref":"refs/heads/joel-you","pushedAt":"2024-03-13T04:45:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ghojeong","name":"JeongWan Gho","path":"/ghojeong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/38595650?s=80&v=4"},"commit":{"message":"๐Ÿš€ 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#171)\n\n* docs(README.md): ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ\r\n\r\n* refactor(SimpleEntityManager): persist ์ž‘๋™ ๋ฐฉ์‹ ๋ณ€๊ฒฝ\r\n\r\n- Entity ์กฐํšŒ ํ›„ ์กด์žฌํ•˜๋ฉด update\r\n- Entity ์กฐํšŒ ํ›„ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด insert\r\n\r\n* feat(EntityLoader.java): ์š”๊ตฌ์‚ฌํ•ญ ๊ตฌํ˜„\r\n\r\n- EntityLoader ๊ตฌํ˜„\r\n- EntityManager ์—์„œ์˜ ์ฑ…์ž„์„ EntityLoader๋กœ ์ด๊ด€\r\n-\r\nEntityManager ์˜ ๋ถˆํ•„์š”ํ•œ ํ•„๋“œ ์ œ๊ฑฐ\r\n\r\n* refactor: persist ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๊ตฌํ˜„\r\n\r\n- update ๋˜๋Š” case์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ถ”๊ฐ€","shortMessageHtmlLink":"๐Ÿš€ 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#171)"}},{"before":"ea2e71bca944de2777c137ba4a5380ebf76c6b32","after":"38607cd271155d7501f163aae3e7bc34f8fee1ff","ref":"refs/heads/juhyun419","pushedAt":"2024-03-12T14:53:50.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"wooobo","name":"wooobo","path":"/wooobo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12059592?s=80&v=4"},"commit":{"message":"2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#169)\n\n* feat: EntityLoader ๊ตฌํ˜„\r\n\r\n* refactor: EntityManger ์˜ find() ์—ญํ• ์„, EntityLoader ๋กœ ์ด๋™","shortMessageHtmlLink":"2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#169)"}},{"before":"05f6ff40d143be0499f333907a25e068df0234ca","after":"9abed72cad31034d970695989d1f9ae24b4dbe2b","ref":"refs/heads/rolroralra","pushedAt":"2024-03-12T14:06:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"wooobo","name":"wooobo","path":"/wooobo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12059592?s=80&v=4"},"commit":{"message":"feat: 0๋‹จ๊ณ„ - ๊ธฐ๋ณธ ์ฝ”๋“œ ์ค€๋น„ (#168)\n\nCo-authored-by: socar-shinyoung ","shortMessageHtmlLink":"feat: 0๋‹จ๊ณ„ - ๊ธฐ๋ณธ ์ฝ”๋“œ ์ค€๋น„ (#168)"}},{"before":"aab8a3d2255f4be5b7587a3225313febac76345a","after":"1cc28fec7cccb49cf296fc0526f76896e6e164c3","ref":"refs/heads/joel-you","pushedAt":"2024-03-12T11:21:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ghojeong","name":"JeongWan Gho","path":"/ghojeong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/38595650?s=80&v=4"},"commit":{"message":"๐Ÿš€ 1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister) (#167)\n\n* docs(README.md): ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ.\r\n\r\n* feat(EntityPersister): EntityPersister ๊ตฌํ˜„\r\n\r\n- ํƒ€ ์ปดํ“จํ„ฐ๋กœ ๊ฐœ๋ฐœ ์ด์–ด๊ฐ€๋ ค๊ณ  ์ค‘๊ฐ„ ์ปค๋ฐ‹\r\n\r\n* feat(EntityPersister): ์š”๊ตฌ์‚ฌํ•ญ 1 - ์—”ํ„ฐํ‹ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘, ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰\r\n\r\n- update ๊ตฌํ˜„\r\n- update ๋ฌธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๊ตฌํ˜„\r\n\r\n* feat(EntityPersister): ์š”๊ตฌ์‚ฌํ•ญ 1 - ์—”ํ„ฐํ‹ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘, ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰\r\n\r\n- insert ๊ตฌํ˜„\r\n- delete ๊ตฌํ˜„\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* feat(EntityPersister): ์š”๊ตฌ์‚ฌํ•ญ 1 - ์—”ํ„ฐํ‹ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘, ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰\r\n\r\n- insert ๊ตฌํ˜„\r\n- delete ๊ตฌํ˜„\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* feat(EntityPersister): EntityManager ์˜ ์ฑ…์ž„ ์ค„์—ฌ์ฃผ๊ธฐ\r\n\r\n- WhereQueryBuilder Builder ํŒจํ„ด์œผ๋กœ ์ˆ˜์ •\r\n- WhereQueryBuilder WhereRecords ๊ฐ€ ์—†๋”๋ผ๋„ primaryKey ๋กœ whereClause ๋  ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ •\r\n- ์ž˜๋ชป ์˜ฎ๊ฒจ์ง„ ํŒŒ์ผ ์‚ญ์ œ\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ˆ˜์ •\r\n- ์š”๊ตฌ์‚ฌํ•ญ Check\r\n\r\n---------\r\n\r\nCo-authored-by: joelyou-nsuslab ","shortMessageHtmlLink":"๐Ÿš€ 1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister) (#167)"}},{"before":"f44ed11ebfef30a444d9918074f9011dd51ec212","after":"053fc40b7ff954954a6ba90afd0a3c21278ef43b","ref":"refs/heads/shinseongsu","pushedAt":"2024-03-11T14:38:54.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"liquidjoo","name":"liquidjoo","path":"/liquidjoo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7530347?s=80&v=4"},"commit":{"message":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#156)\n\n* docs: ์š”๊ตฌ์‚ฌํ•ญ์ •๋ฆฌ\r\n\r\n* feat: Entity ์ƒํƒœ ์ •์˜ ํ•˜๊ธฐ\r\n\r\n* feat: EntityEntry ๊ตฌํ˜„ํ•˜๊ธฐ\r\n\r\n* feat: EntityEntityContext ์ƒ์„ฑ\r\n\r\n* feat: ์ƒํƒœ์— ๋”ฐ๋ฅธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ถ”๊ฐ€\r\n\r\n* feat: ์ปค์Šคํ…€ ์˜ˆ์™ธ ์ถ”๊ฐ€\r\n\r\n* feat: ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€\r\n\r\n* feat: readOnlyFind ์ •์˜\r\n\r\n* test: ์ƒํƒœ์— ๋”ฐ๋ฅธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ถ”๊ฐ€\r\n\r\n* test: ์‚ญ์ œ์— ๋”ฐ๋ฅธ ์ƒํƒœ ์ˆ˜์ •๊ฐ’ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* test: ์‚ญ์ œ๊ฐ€ ๋˜์—ˆ์„๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•˜๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ถ”๊ฐ€\r\n\r\n* docs: ์™„๋ฃŒ๋œ ์š”๊ตฌ์‚ฌํ•ญ ์ฒดํฌ\r\n\r\n* refactor: EntityKey key๊ฐ’ ๋ง๊ณ  Entity๋กœ ์ˆ˜์ •\r\n\r\n* refactor: ๊ฐ’์ด ์—†๋Š” null ๊ฐ’ ๋„ฃ์„์‹œ ์ธ์Šคํ„ด์Šค์— id๊ฐ’ ๋„ฃ๊ธฐ\r\n\r\n* refactor: EntityKey ๋ง๊ณ , Entity๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ๋Š”๋‹ค.\r\n\r\n* fix: Class, id์„ entity๋ฅผ ๋ฐ›๋„๋ก ์ˆ˜์ •\r\n\r\n* test: class ๋ฐ id๋ฅผ Object๋กœ ๋ฐ›๋„๋ก ํ•œ๋‹ค.\r\n\r\n* test: id ๊ฐ’์ด ๋„๊ฐ’์ด ๋“ค์–ด์™€๋„ ์ €์žฅ์ด ๋˜๋„๋ก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* feat: saving ์‹œ, entityEntry๊ฐ€ ์—†์„์‹œ, saving ๋„ฃ๋„๋ก ์ˆ˜์ •\r\n\r\n* feat: EntityEntry์— ๊ฐ์ฒด๊ฐ’๋„ ๋„ฃ์–ด ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* refactor: EntitEntry์„ Map ๋ง๊ณ  ๊ฐ์ฒด๊ฐ’์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด ๊ด€๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •","shortMessageHtmlLink":"๐Ÿš€ 4๋‹จ๊ณ„ - EntityEntry (#156)"}},{"before":"e9ef2ec74f9dc8b5faf3ff8b70ccde9c7db4a519","after":"3b138b60d134c2821d700f253a80b78536cab8bf","ref":"refs/heads/jurlring","pushedAt":"2024-03-11T11:59:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwee0330","name":null,"path":"/jwee0330","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/54702844?s=80&v=4"},"commit":{"message":"[๐Ÿš€ 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader)] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#162)\n\n* docs: 2๋‹จ๊ณ„ ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ\r\n\r\n* feature: DMLGenerator ์—์„œ Table ์ •๋ณด ๋ฐ›๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: EntityManager.find ์—์„œ queryForObject ์‚ฌ์šฉํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: RowMapper ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋„๋ก ๋ฆฌํŽ™ํ„ฐ๋ง\r\n\r\n* feature: RowMapper ๋ฆฌํŒฉํ„ฐ๋ง ํ›„ ํ…Œ์ŠคํŠธ ๊นจ์ง€๋Š” ๋ถ€๋ถ„ ์ˆ˜์ •\r\n\r\n* feature: ๋ฏธ์‚ฌ์šฉ RowMapper ์‚ญ์ œ\r\n\r\n* feature: ntityManager ์˜ ๊ตฌํ˜„์ฒด์—์„œ find ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ EntityLoader ๋กœ ์˜ฎ๊ธฐ๊ธฐ\r\n\r\n---------\r\n\r\nCo-authored-by: jurlring ","shortMessageHtmlLink":"[๐Ÿš€ 2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader)] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#162)"}},{"before":"05f6ff40d143be0499f333907a25e068df0234ca","after":"aab8a3d2255f4be5b7587a3225313febac76345a","ref":"refs/heads/joel-you","pushedAt":"2024-03-11T05:59:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"ghojeong","name":"JeongWan Gho","path":"/ghojeong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/38595650?s=80&v=4"},"commit":{"message":"๐Ÿš€ 0๋‹จ๊ณ„ - ๊ธฐ๋ณธ ์ฝ”๋“œ ์ค€๋น„ (#164)\n\n* feat(QueryBuilder): ๊ธฐ์กด ์ฝ”๋“œ ์˜ฎ๊ธฐ๊ธฐ\r\n\r\n- QueryBuilder๋“ค๊ณผ, EntityManager ์ด๋™\r\n\r\n* feat(QueryBuilder): ๊ธฐ์กด ์ฝ”๋“œ ์˜ฎ๊ธฐ๊ธฐ\r\n\r\n- ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋„ ํฌํ•จ\r\n\r\n---------\r\n\r\nCo-authored-by: joelyou-nsuslab ","shortMessageHtmlLink":"๐Ÿš€ 0๋‹จ๊ณ„ - ๊ธฐ๋ณธ ์ฝ”๋“œ ์ค€๋น„ (#164)"}},{"before":null,"after":"05f6ff40d143be0499f333907a25e068df0234ca","ref":"refs/heads/joel-you","pushedAt":"2024-03-11T05:23:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"javajigi","name":"๋ฐ• ์žฌ์„ฑ","path":"/javajigi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/520500?s=80&v=4"},"commit":{"message":"fix: move the cursor forward when querying an object","shortMessageHtmlLink":"fix: move the cursor forward when querying an object"}},{"before":"bcef3c9bca15f1d7cb1f780f1fe717ce68c184f1","after":"50a65f79443a4dff13118f8fd86f92d62de32320","ref":"refs/heads/joydaheecha","pushedAt":"2024-03-10T17:27:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jongmin4943","name":"Jongmin Yoon","path":"/jongmin4943","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/77711322?s=80&v=4"},"commit":{"message":"2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#160)\n\n* (adjust) find์—์„œ 2๊ฐœ ์ด์ƒ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋  ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ๋ผ\r\n\r\n* (adjust) ์ฟผ๋ฆฌ๋ฌธ์„ ๋ณ„๋„ ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ๋ผ\r\n\r\n* (adjust) update ์ฟผ๋ฆฌ๋ฌธ์— ๋Œ€ํ•ด id๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š” ๊ฒฝ์šฐ์™€ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ผ\r\n\r\n* (refactor) ํŒจํ‚ค์ง€ ์ด๋™ (ddl -> dml)\r\n\r\n* (refactor) setClauses๋กœ ๊ฐ์ฒด์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ\r\n\r\n* (docs) readme ์—…๋ฐ์ดํŠธ\r\n\r\n* (test) h2๋Š” ํ•œ๋ฒˆ๋งŒ ์ดˆ๊ธฐํ™”ํ•˜๋ผ\r\n\r\n* (refactor) DDL ํ…Œ์ŠคํŠธ๋ฌธ์—์„œ๋Š” jdbcTemplate ์ด์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.\r\n\r\n* (docs) reamad ์—…๋ฐ์ดํŠธ\r\n\r\n* (test) ValueClause์˜ getValue์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ๋ผ.\r\n\r\n* (modify) ntityManager ์˜ ๊ตฌํ˜„์ฒด์—์„œ find ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ EntityLoader ๋กœ ์˜ฎ๊ฒจ์ฃผ์ž\r\n\r\n* (docs) readme ์—…๋ฐ์ดํŠธ","shortMessageHtmlLink":"2๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ์ดˆ๊ธฐํ™” (EntityLoader) (#160)"}},{"before":"05f6ff40d143be0499f333907a25e068df0234ca","after":"e9ef2ec74f9dc8b5faf3ff8b70ccde9c7db4a519","ref":"refs/heads/jurlring","pushedAt":"2024-03-10T13:27:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jwee0330","name":null,"path":"/jwee0330","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/54702844?s=80&v=4"},"commit":{"message":"[๐Ÿš€ 1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister)] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#157)\n\n* feat: set up the project\r\n\r\n* test: int to string test (#135)\r\n\r\nCo-authored-by: give.yoon \r\n\r\n* [Step1 - Reflection] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#160)\r\n\r\n* feat: Reflection์„ ํ™œ์šฉํ•˜์—ฌ Car ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค\r\n\r\n* test: car reflection test\r\n\r\n* docs: step1 ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ\r\n\r\n---------\r\n\r\nCo-authored-by: Shin seongsu \r\nCo-authored-by: jurlring \r\n\r\n* [Step2 - QueryBuilder DDL] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#182)\r\n\r\n* docs: step2 ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ\r\n\r\n* feature: ์š”๊ตฌ์‚ฌํ•ญ 1์— ํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜ ์ถ”๊ฐ€\r\n\r\n* feature: Person ์ƒ์„ฑ\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 1 ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๋‚ด์šฉ ์ถ”๊ฐ€\r\n\r\n* feature: @Entity, @Id ๊ฐ€ ํฌํ•จ๋œ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ create ์ฟผ๋ฆฌ ๋งŒ๋“ค๊ธฐ\r\n\r\n* feature: ColumnType ์„ enum ์—์„œ ์ฐพ๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: ์š”๊ตฌ์‚ฌํ•ญ2 Person ์ •๋ณด ์—…๋ฐ์ดํŠธ\r\n\r\n* feature: Column, GeneratedValue ์ ์šฉ\r\n\r\n* feature: GenerationType Strategy ๋ณ„๋กœ ddl ๋ฐ˜ํ™˜ํ•˜๋Š” enum ๊ฐœ๋ฐœ\r\n\r\n* feature: MySql ์—์„œ ์ปฌ๋Ÿผ ์ •๋ณด ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค ๋ถ„๋ฆฌ\r\n\r\n* feature: MySql ์—์„œ ํ…Œ์ด๋ธ” ์ •๋ณด ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค ๋ถ„๋ฆฌ\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 1,2 ์ถ”๊ฐ€\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 3 ์ถ”๊ฐ€\r\n\r\n* feature: ์š”๊ตฌ์‚ฌํ•ญ 3 Person ์ •๋ณด ์ถ”๊ฐ€\r\n\r\n* feature: @Table ์— name ์†์„ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ, ํ…Œ์ด๋ธ” ์ด๋ฆ„์€ name ์†์„ฑ ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ๋‹ค.\r\n\r\n* feature: @Transient ์ด ๋ถ™์€ ์ปฌ๋Ÿผ์€ database ์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.\r\n\r\n* feature: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ create ์ฟผ๋ฆฌ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐœ๋ฐœ\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 4 ์ถ”๊ฐ€\r\n\r\n* feature: @Table ์— name ์†์„ฑ์ด ์žˆ์„ ๊ฒฝ์šฐ, name ์†์„ฑ ๊ฐ’์œผ๋กœ ์‚ญ์ œํ•œ๋‹ค.\r\n\r\n* feature: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ drop ์ฟผ๋ฆฌ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐœ๋ฐœ\r\n\r\n* feature: eof ์ถ”๊ฐ€\r\n\r\n* feature: enum ์ฝ”๋“œ ํฌ๋ฉงํŒ…\r\n\r\n* feature: eof ์ถ”๊ฐ€\r\n\r\n* feature: ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ\r\n\r\n* feature: ColumnName ์›์‹œ๊ฐ’ ๋ถ„๋ฆฌ\r\n\r\n* feature: ColumnName ์›์‹œ๊ฐ’ ์ ์šฉ\r\n\r\n* feature: ColumnLength ์›์‹œ๊ฐ’ ํฌ์žฅ\r\n\r\n* feature: ColumnLength ์›์‹œ๊ฐ’ ์ ์šฉ\r\n\r\n* feature: TableName ์›์‹œ๊ฐ’ ๋ถ„๋ฆฌ\r\n\r\n* feature: TableName ์›์‹œ๊ฐ’ ์ ์šฉ\r\n\r\n* feature: ColumnType enum ์—์„œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: getGeneratedValueStrategyDefinition ํ•˜๋Š” ์ฑ…์ž„์„ GeneratedValueStrategy๋กœ ์ด๋™\r\n\r\n* feature: id ์†์„ฑ์„ Column ์ด ๊ฐ€์ง€๋„๋ก ์ˆ˜์ •\r\n\r\n* docs: ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค๋กœ ์ €์žฅํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ ์ถ”๊ฐ€\r\n\r\n* feature: ์ฟผ๋ฆฌ ์ƒ์„ฑ ์—ญํ• ์„ DDLGenerator์—์„œ ํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: eof ์ถ”๊ฐ€\r\n\r\n* feature: GenerationTypeStrategy ๊ฐ’ ์ถ”๊ฐ€์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ์ˆ˜์ •\r\n\r\n* feature: Id ์–ด๋…ธํ…Œ์ด์…˜์ด ์—†์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n---------\r\n\r\nCo-authored-by: jurlring \r\n\r\n* [Step3 - QueryBuilder DML] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#216)\r\n\r\n* feature: ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ฑฐ\r\n\r\n* feature: Columns ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ณ€๊ฒฝ\r\n\r\n* feature: util ํด๋ž˜์Šค ํŒจํ‚ค์ง€ ์ด๋™\r\n\r\n* docs: step3 ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ\r\n\r\n* feature: IdColumn, StandardColumn ๋ถ„๋ฆฌ\r\n\r\n* feature: insert ๊ตฌํ˜„\r\n\r\n* test: getValueClause ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€\r\n\r\n* feature: String, LocalDate ํƒ€์ž…์ผ ๊ฒฝ์šฐ insert ๋ฌธ์—์„œ '' ์ถ”๊ฐ€ํ•˜๋„๋ก ๊ฐœ๋ฐœ\r\n\r\n* feature: findAll ๊ตฌํ˜„\r\n\r\n* feature: findAll ๊ตฌํ˜„\r\n\r\n* feature: ๋‹จ๊ฑด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„\r\n\r\n* feature: ์˜คํƒ€ ์ˆ˜์ •\r\n\r\n* feature: delete ์ฟผ๋ฆฌ ๊ตฌํ˜„\r\n\r\n* feature: delete ์ฟผ๋ฆฌ ์ ์šฉ\r\n\r\n* feature: add eof\r\n\r\n---------\r\n\r\nCo-authored-by: jurlring \r\n\r\n* [Step4 - Simple Entity Object] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#223)\r\n\r\n* docs: 4๋‹จ๊ณ„ ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ\r\n\r\n* feature: find ๊ตฌํ˜„\r\n\r\n* feature: find ์˜ˆ์™ธ์‚ฌํ•ญ ๊ตฌํ˜„\r\n\r\n* docs: find ๊ตฌํ˜„ ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* feature: TODO ์ถ”๊ฐ€\r\n\r\n* test: persist ํ…Œ์ŠคํŠธ ๊ตฌํ˜„\r\n\r\n* feature: persist ๊ตฌํ˜„\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 2 ์˜ˆ์™ธ ์ถ”๊ฐ€\r\n\r\n* feature: persist ํ•  Object ๊ฐ€ Entity ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.\r\n\r\n* test: remove test ๊ตฌํ˜„\r\n\r\n* feature: remove ๊ตฌํ˜„\r\n\r\n* docs: ์š”๊ตฌ์‚ฌํ•ญ 3 ์˜ˆ์™ธ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* feature: ์š”๊ตฌ์‚ฌํ•ญ3 ์˜ˆ์™ธ ๊ตฌํ˜„\r\n\r\n* feature: ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ „์— ๊ฒ€์ฆํ•˜๋„๋ก ์ˆ˜์ •\r\n\r\n* feature: ๋ฏธ์‚ฌ์šฉ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ\r\n\r\n* feature: ์™„์ „ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝ\r\n\r\n---------\r\n\r\nCo-authored-by: jurlring \r\n\r\n* feat: set up the project\r\n\r\n* docs: 1๋‹จ๊ณ„ ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€\r\n\r\n* feature: EntityPersister insert ๊ธฐ๋Šฅ ๊ตฌํ˜„\r\n\r\n* feature: DMLGenerator update ์ฟผ๋ฆฌ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„\r\n\r\n* feature: EntityPersister update ๊ธฐ๋Šฅ ๊ตฌํ˜„\r\n\r\n* feature: EntityPersister delete ๊ธฐ๋Šฅ ๊ตฌํ˜„\r\n\r\n* feature: EntityManager ์˜ ์ฑ…์ž„ ์ค„์—ฌ์ฃผ๊ธฐ\r\n\r\n---------\r\n\r\nCo-authored-by: wotjd243 \r\nCo-authored-by: give.yoon \r\nCo-authored-by: Shin seongsu ","shortMessageHtmlLink":"[๐Ÿš€ 1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister)] ์œค์ฃผ๋ฆฌ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. (#157)"}},{"before":"ee56d2f230e40cd06ca8c66a232e5923116b02ba","after":"e9d6c10dba57e5aef6ccf8004e69a64e6f0c6871","ref":"refs/heads/who-is-hu","pushedAt":"2024-03-10T12:51:05.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"NamKey","name":"๋‚จ๊ธฐ๋ฅญ","path":"/NamKey","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/25685282?s=80&v=4"},"commit":{"message":"Step4 (#159)\n\n* refactor: ๋งค์ง๋„˜๋ฒ„ ์—†์• ๊ณ  ๋ผ๋ฒจ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ\r\n\r\n* feat: merge์™€ persist ๋ถ„๋ฆฌ\r\n\r\n* feat: persist ์‹œ managed ์ƒํƒœ์˜ entityEntry ์ €์žฅ\r\n\r\n* feat: persist ๋Š” ์ด๋ฏธ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฉด ์—๋Ÿฌ\r\n\r\n* fix(test) : merge๋ฅผ ํ…Œ์ŠคํŠธํ•ด์•ผํ•จ\r\n\r\n* feat: merge์‹œ ๊ด€๋ฆฌ์•ˆํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ๋ฉด ์—๋Ÿฌ\r\n\r\n* fix(test): id ์žˆ๋Š”๊ฒƒ persist ํ•˜์ง€ ์•Š๊ฒŒ\r\n\r\n* refactor: EntityPersister ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ\r\n\r\n* feat: merge๋Š” ์˜์†์„ฑ ๊ด€๋ฆฌ์ค‘์ธ๊ฒƒ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ฒŒ\r\n\r\n* refactor: EntityEntry๋ฅผ factory ๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋ณ€๊ฒฝ\r\n\r\n* feat: update ์‹œ saving->managed ๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ\r\n\r\n* feat: db ์ฟผ๋ฆฌ์‹œ ์—”ํ‹ฐํ‹ฐ์—”ํŠธ๋ฆฌ๋ฅผ loading -> managed๋กœ ๋ณ€๊ฒฝ\r\n\r\n* feat: delete ์ฟผ๋ฆฌ์‹œ DELETED -> GONE์œผ๋กœ ๋ณ€๊ฒฝ\r\n\r\n* feat: readOnly ์ƒํƒœ๋ฉด ์ˆ˜์ •ํ• ์ˆ˜ ์—†๊ฒŒ\r\n\r\n* refactor: entry์— loader, persister ์ œ๊ฑฐ\r\n\r\n์šฉ๋„๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ","shortMessageHtmlLink":"Step4 (#159)"}},{"before":"7a663ff05f4626f984d7ab6bb330ae45af8df7ed","after":"ea2e71bca944de2777c137ba4a5380ebf76c6b32","ref":"refs/heads/juhyun419","pushedAt":"2024-03-10T09:34:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"wooobo","name":"wooobo","path":"/wooobo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12059592?s=80&v=4"},"commit":{"message":"1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister) (#158)\n\n* refactor: ๋ฏธ์‚ฌ์šฉ ํด๋ž˜์Šค ์ œ๊ฑฐ\r\n\r\n* refactor: DMLColumn ๊ฐ์ฒด์˜ ์—ญํ• ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปฌ๋Ÿผ๋ช…๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.\r\n\r\n* refactor: Value ๊ฐ์ฒด์˜ ์—ญํ• ์„ Object ์˜ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.\r\n\r\n* refactor: DMLColumn, Value ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์˜ํ•œ ์ˆ˜์ •\r\n\r\n* feat: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ getter ์ถ”๊ฐ€\r\n\r\n* feat: EntityPersister update() ๋ฅผ ์œ„ํ•œ Builder ์ถ”๊ฐ€\r\n\r\n* feat: EntityPersister update(), insert(), delete() ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€\r\n\r\n* refactor: EntityPersister#update() ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ Object ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ getter ๋ฉ”์„œ๋“œ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.\r\n\r\n* refactor: ์š”๊ตฌ์‚ฌํ•ญ 2. EntityManager ์˜ ๊ตฌํ˜„์ฒด์—์„œ ์ฟผ๋ฆฌ ์ƒ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ ๋งคํ•‘์— ๋Œ€ํ•œ ์ฑ…์ž„์„ EntityPersister ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.\r\n\r\n - EntityPersister ๊ฐ์ฒด์—์„œ select() ๋ฉ”์„œ๋“œ๋„ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด, jdbcTemplate ๋„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.","shortMessageHtmlLink":"1๋‹จ๊ณ„ - ์—”ํ„ฐํ‹ฐ ๋งคํ•‘ (EntityPersister) (#158)"}},{"before":"f19c34ae1251c9b4e3b5ea9aa9d54f6e13897d5d","after":"b352ddfbb4bc44e3c0d0f2586b1d8ebc4bd60375","ref":"refs/heads/parkje0927","pushedAt":"2024-03-10T03:14:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"liquidjoo","name":"liquidjoo","path":"/liquidjoo","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7530347?s=80&v=4"},"commit":{"message":"[Entity ๊ตฌํ˜„ - Step 3๋‹จ๊ณ„] First Level Cache, Dirty Check (#155)\n\n* refactor: step3 - EntityMetaData ์˜ ์ฑ…์ž„์„ ์ค„์ด๊ณ  ๊ฐ ์—ญํ• ์„ ๋ถ„๋ฆฌ, ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰\r\n\r\n* refactor: step3 - ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ๋ณ€๊ฒฝ\r\n\r\n* feat: step3 - First Level Cache, Dirty Check ๊ตฌํ˜„\r\n\r\n* feat: step3 - ๊ธฐ์กด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ ์šฉ\r\n\r\n* test: step3 - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* docs: step3 - ์š”๊ตฌ์‚ฌํ•ญ ๋ฌธ์„œ ๋ฐ ๊ฐ•์˜ ๋‚ด์šฉ ์ •๋ฆฌ ์ถ”๊ฐ€","shortMessageHtmlLink":"[Entity ๊ตฌํ˜„ - Step 3๋‹จ๊ณ„] First Level Cache, Dirty Check (#155)"}},{"before":"bc46cf6a69ed3b6dd00d50877022c1d15fa82b4e","after":"b2dd87408cbc077fc847bed44db344bbd10849a1","ref":"refs/heads/jaesungahn91","pushedAt":"2024-03-09T15:28:41.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jinyoungchoi95","name":"์ตœ์ง„์˜","path":"/jinyoungchoi95","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/69106910?s=80&v=4"},"commit":{"message":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#153)\n\n* docs: step3 ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜\r\n\r\n* fix, refactor: step2 ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ1. PersistenceContext ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ณ  1์ฐจ ์บ์‹ฑ์„ ์ ์šฉ\r\n\r\n* test: ์š”๊ตฌ์‚ฌํ•ญ 1. ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ 2. snapshot ๋งŒ๋“ค๊ธฐ\r\n\r\n* test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •\r\n\r\n* feat: ์š”๊ตฌ์‚ฌํ•ญ3. ๋”ํ‹ฐ์ฒดํ‚น ๊ตฌํ˜„","shortMessageHtmlLink":"๐Ÿš€ 3๋‹จ๊ณ„ - First Level Cache, Dirty Check (#153)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMy0yN1QwOTo1Mjo1My4wMDAwMDBazwAAAAQgh9Zw","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMy0yN1QwOTo1Mjo1My4wMDAwMDBazwAAAAQgh9Zw","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wMy0wOVQxNToyODo0MS4wMDAwMDBazwAAAAQQ_6vJ"}},"title":"Activity ยท next-step/jpa-entity-manager"}