{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2021-01-28--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"64b6c2c3-6263-5d21-ad60-61e3f1b83e07","html":"<p><span class=\"title__sub1\">@Entity</span></p>\n<ul>\n<li>JPA는 내부적으로 replication 등을 쓰기 때문에 동적으로 생성할 수 있어야 한다.</li>\n<li>따라서 기본 생성자가 필요하다. (public 또는 protected)</li>\n</ul>\n<p><span class=\"title__sub1\"> 데이터베이스 스키마 자동 생성</span></p>\n<ul>\n<li>DDL을 애플리케이션 실행 시점에 자동 생성</li>\n<li>데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성</li>\n<li>운영 장비에는 절대 create, create-drop, update 사용하면 안됨.</li>\n<li>\n<p>스테이징과 운영 서버는 validate 또는 none 사용</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">hibernate.hbm2ddl.auto=create</code></pre></div>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/8bafaeaffae4ad205fd8c890ee4ef0e2/f6b72/001-01.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 615px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 49.583333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABgklEQVQoz11Si5KDIAzk/7+wY0+tT1Twrah9pdlYbm6OmSgkZHeToJLbjaIoovv9Tu/3m/q+pzSBL6YkTakoCrGmacRS9mVZRtdrQFVd0zAMvL9SHMektSbVdR21bUvP51NsWRaaxpFGtmEYaZ5nsW3baF1XAThjvZyP45B8GGIKHyT2fUfWtnLZWkPGmO+lnkAKdmMtGVZpGiPqsM/znIEd+aVqDtR1Q5YBkAQCY/jMYACap0lIAI52gOy8cxJaJnGsHu1Chcq5lRMmejwe4oQi9MoDCBmUMQD8zjkmaqWagePGWOk/wIChsiylkIeCfshQWJUfQsegKKmqtPiwn6ZZzqgGpDn7AYT1er2g0AkYmg4mP4R5XmRAKBnx844TVYj7PBnidFb4VZhREARSFhZ6mrNP60pURGEoylBJWRYU8jlJEvFpXcozKkst1cGUrx9y930XZuc2UXwc++/7RBzmE32Oj+EeTN34QTbccL8wiMvl8lX3wz0qxY/Ev3+//p8/5ef6IzEOONcAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 01\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/8bafaeaffae4ad205fd8c890ee4ef0e2/f6b72/001-01.png\"\n        srcset=\"/devHistoryBlog/static/8bafaeaffae4ad205fd8c890ee4ef0e2/8ff5a/001-01.png 240w,\n/devHistoryBlog/static/8bafaeaffae4ad205fd8c890ee4ef0e2/e85cb/001-01.png 480w,\n/devHistoryBlog/static/8bafaeaffae4ad205fd8c890ee4ef0e2/f6b72/001-01.png 615w\"\n        sizes=\"(max-width: 615px) 100vw, 615px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n</li>\n</ul>\n<p><span class=\"title__sub1\"> 매핑 어노테이션 정리</span></p>\n<ul>\n<li>Date 클래스 사용시 만 @Temporal 사용, </li>\n<li>LocalData, LocalDateTime을 사용할때는 생략</li>\n<li>@Transient 는 주로 메모리상에서만 임시로 보관하고 싶을 때 사용\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/45f929eac456dc1de9fca946ff0503e6/17602/001-02.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 597px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 52.083333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABN0lEQVQoz5VS2W7DMAzL/3/gCjRt7tRZlvs+y4kq8jBgWDoDhC1ZlilKVuD7SJIEiTEYxwlcnuvC9Tx4gmma8Z9ldV2Htm3RdS2WZcW6rqiqCn3fg3f7vmsg/e/AMsLsK8uQCYqiUCcZm4dRXxxFMCbB8/nEtm36wV+wWGqapoqiKPURz2VZKtMiz3VnwrcYOo6jjCJhQs3CMERT16LdhE6kKMtKmfbDoElPGfLhNI6qFzHIw0ccyyefyPNMP4vFpp/rNCGTjJLw0Ie0m6aRBL3653nSBtXCmjvvl2X5FVpyEAQq+tFNlhVFIULxs1QypAyMq+Wj07F5sZh/gAzpZ5lkRVloH6PE/TgfNmPJ0nLud/gy3LfbTZnqYHvuC+LnfpcY27a1adfrFRw1vrlcPsCm0mYllO0buVwCrbPX+lgAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 02\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/45f929eac456dc1de9fca946ff0503e6/17602/001-02.png\"\n        srcset=\"/devHistoryBlog/static/45f929eac456dc1de9fca946ff0503e6/8ff5a/001-02.png 240w,\n/devHistoryBlog/static/45f929eac456dc1de9fca946ff0503e6/e85cb/001-02.png 480w,\n/devHistoryBlog/static/45f929eac456dc1de9fca946ff0503e6/17602/001-02.png 597w\"\n        sizes=\"(max-width: 597px) 100vw, 597px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n</ul>\n<p><span class=\"title__sub1\"> 기본 키 매핑</span>\n<span class=\"title__sub2\"> 기본 키 매핑 어노테이션 </span></p>\n<ul>\n<li>@Id </li>\n<li>@GeneratedValue (전략은 AUTO가 기본)</li>\n</ul>\n<p><span class=\"title__sub2\"> 전략 종류 </span></p>\n<ul>\n<li>IDENTITY : 데이터베이스에 위임, MYSQL  </li>\n<li>SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE<br>\n— @SequenceGenerator 필요</li>\n<li>TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용, 잘 사용하지 않음<br>\n— @TableGenerator 필요</li>\n<li>AUTO : 방언에 따라 자동 지정, 기본 값</li>\n</ul>\n<p><span class=\"title__sub3\"> IDENTITY 전략 특징 </span></p>\n<ul>\n<li>주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용 (auto_increment)\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/c9462d753e49bf719891215f260515da/b04e4/001-04.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 888px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 24.583333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA0UlEQVQY05WQyW7DMAxE/TFBo82yFitarMR2kxQ99f//ZkplB9JLDw8cjKQhqe7ny2NJHGmUyJZj5w3qvCCmhMEMEJL/i+5cHZJhcFo8Aqf5kwIzeq3B+BZcNNiNV/3qXf1OGwc/MqTMsRXURbWDDfEBqSSF9lC9Ii2oyot+1qvfN60aEp21HhOFfR8lDkVgXQasq8W+WkxlQikHzPMJ3o8Iu0iNy2X6Rq57hBBRQkX0GaMLFOgsjGKIVtDqnB46BLrsrYOmSRitcv+ft1X/8H8BLxubKHOhWtMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 04\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/c9462d753e49bf719891215f260515da/b04e4/001-04.png\"\n        srcset=\"/devHistoryBlog/static/c9462d753e49bf719891215f260515da/8ff5a/001-04.png 240w,\n/devHistoryBlog/static/c9462d753e49bf719891215f260515da/e85cb/001-04.png 480w,\n/devHistoryBlog/static/c9462d753e49bf719891215f260515da/b04e4/001-04.png 888w\"\n        sizes=\"(max-width: 888px) 100vw, 888px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n</ul>\n<p><span class=\"title__sub3\"> SEQUENCE 전략 특징 </span></p>\n<ul>\n<li>주로 Oracle, PostgreSQL, DB2, H2 에서 사용 (auto_increment)</li>\n<li>INSERT SQL 실행 후에 id 값을 알 수 있으므로 <span class=\"text-mark__red\">해당 전략에서는 persist(add) 시점에 즉시 SQL이 수행</span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/de9bd811bec00e9fc75ed4ca8edf2692/6acbf/001-05.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 36.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABSElEQVQoz11R206EMBTkY1ygLZSWQqHcFtwNa6Jmo4n//ynjABujPkwGTulcDtEyS5wnidAKOBcTCUonIDNCCQiZ7ryDs1Qkf7CdH3y8R8ZIaJ2i61rc758YhoDLuiCMAaU3aEa3ww8ljTSKQsNYg8JoWLLWOTRnusj3syhXCkoI1JXHbX3H7eUDr29fFF54sUA/DZiWZ0znmbMZfT+haTuKu0OwOEx2pknUWAmnJWwu4Zm28oFokeUZxKOWoqmUEiqTrCaQpDHnMeL0ic+nf5UpOI6SlQUdUrqeyPGernTVjk3clJZzVmUqW5ZMxXPj4KxDlqmfXUdaK9ZVaD1Fg8G6zrheJkzjgjYMmK8LfF+j5W4D0Z87DHOPtmMT61GVNfLfgnl21G0K7pGpmm6CrwMsEySsJRQr59tf5oXsAXVgq71/8xDb+BuHONvGjbZcJgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 05\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/de9bd811bec00e9fc75ed4ca8edf2692/d9199/001-05.png\"\n        srcset=\"/devHistoryBlog/static/de9bd811bec00e9fc75ed4ca8edf2692/8ff5a/001-05.png 240w,\n/devHistoryBlog/static/de9bd811bec00e9fc75ed4ca8edf2692/e85cb/001-05.png 480w,\n/devHistoryBlog/static/de9bd811bec00e9fc75ed4ca8edf2692/d9199/001-05.png 960w,\n/devHistoryBlog/static/de9bd811bec00e9fc75ed4ca8edf2692/6acbf/001-05.png 1001w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n</ul>\n<p><span class=\"title__sub1\"> 연관관계 매핑</span>\n<span class=\"title__sub2\"> 1) 단방향 연관관계 </span>\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/6fcb6/001-06.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 13.333333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABcRAAAXEQHKJvM/AAAArklEQVQI1zWOyQqFMAxF/f9vcmUXDpviAEW6UBAHxKl1oeJwXxN4gZBFknOPp7VGXddYloV72zZM08Q9DMNHu3meTd/3uVIKSZK8VVXBGIPjOLDvO9Z1Rdd1SNMUHh01TcMHtLyui2fbtnBhHz07mMmyLBdCwPf9tygKDn+eh6EuEFJKBEEAL45jjOPIRgT7l7WWzD+azsBEUZQ7GMIwfMna2eM8T9z3zdCyLNnyB21+281pw44SAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 06\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/d9199/001-06.png\"\n        srcset=\"/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/8ff5a/001-06.png 240w,\n/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/e85cb/001-06.png 480w,\n/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/d9199/001-06.png 960w,\n/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/07a9c/001-06.png 1440w,\n/devHistoryBlog/static/89701b59782fe88fa50841f4d6a9d476/6fcb6/001-06.png 1523w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<ul>\n<li>Member 와 Team 의 관계는 n:1</li>\n<li><span class=\"text-mark__red\">Member(n)에 Team(1)에 대한 FK가 들어간다.</span></li>\n</ul>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/82c81a0e165f16fcc110de4070cea69d/27e9a/001-07.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 55.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABRElEQVQoz5VSSU4DMRCcT4Hb+xbPPiEsQSQSEhLi/08oehwFidMkh3Jf7HIt3fRJYswS0UkkQ0jeoXQTnI9QSoGIIKX8m1togmEiJvOM7AnBKexKRIy2El4v3kzoLKFlhc8jYT8pTHPCPDp0haCkgBB0l8rGaLYbJEoSyMmj7RcY42GcQcgOPrp/1jcJvZXoWeHLIDD3AfO8R9v26NsOiT/QVt2VZWOUxJrjmDSKV1yO4gg6WK3Z8oVM3ZOhXH+XGim3yDtGLqwsVQzDUKe1hu/QTQU16+HYdmaFKV6gWZ1kgnUSl/L4eClHCLFpnRUSloXw8y1wPgl8fT5g4pan+RUxZVguJ3e8RjuPkMK2QsUZDlzKaVF459VZ5oLjxxFvhzMO4xNnSHDBwnpTybcJ+ViLqag5rZb5IUlopevjuotXbFj+BTAfdwzk6J+0AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 07\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/82c81a0e165f16fcc110de4070cea69d/d9199/001-07.png\"\n        srcset=\"/devHistoryBlog/static/82c81a0e165f16fcc110de4070cea69d/8ff5a/001-07.png 240w,\n/devHistoryBlog/static/82c81a0e165f16fcc110de4070cea69d/e85cb/001-07.png 480w,\n/devHistoryBlog/static/82c81a0e165f16fcc110de4070cea69d/d9199/001-07.png 960w,\n/devHistoryBlog/static/82c81a0e165f16fcc110de4070cea69d/27e9a/001-07.png 1253w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<br/>\n<p><span class=\"title__sub2\"> 2) 양방향 연관관계와 연관관계의 주인 </span></p>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/82994e919072969ac58ce85f26bb482e/d4b10/001-08.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 14.583333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABcRAAAXEQHKJvM/AAAAsklEQVQI1zVPywqDQBDz/3+nJw/iSUoVVDx4WXyAug4+1kcFPdhNd5Z2IAxkQpJxxnGEEAJd16FtW2zbhnVdQUTo+/7D3LIsz6ZpgjiOEYbhLaW0un3f7S7LElEUWR+nrmvkeY55njFNE87zxHVdGIYBfPsZvpIkCVzXhe/7N/OGs1oGm3mehzRN4RghGUNSSpFJIwAWx3GQaSTN7V1V1aMoiiDLMm5z/4O11uDhcOb4sy9Xl9nWvP387AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 08\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/82994e919072969ac58ce85f26bb482e/d9199/001-08.png\"\n        srcset=\"/devHistoryBlog/static/82994e919072969ac58ce85f26bb482e/8ff5a/001-08.png 240w,\n/devHistoryBlog/static/82994e919072969ac58ce85f26bb482e/e85cb/001-08.png 480w,\n/devHistoryBlog/static/82994e919072969ac58ce85f26bb482e/d9199/001-08.png 960w,\n/devHistoryBlog/static/82994e919072969ac58ce85f26bb482e/d4b10/001-08.png 1394w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n     </p>\n<ul>\n<li>연관관계의 주인은 외래키의 위치를 기준으로 정해야함</li>\n<li>주인이 아닌쪽은 읽기 전용</li>\n<li>주인이 아니면 mappedBy 속성으로 주인 지정</li>\n<li>여기서는 Member.team 이 연관관계의 주인이 된다.</li>\n</ul>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/bce1e/001-09.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 29.166666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABcRAAAXEQHKJvM/AAABSElEQVQY02WPzWrDMBCE/VTxSpYsWXbkPzm2E4ceCrn0ZAqCPm0CPpc+Q2vCVHGhFHr4GHYXZmYjVzIYRdBKIjM5eJKAMXYPgIhuY0cXV9Gr5GyWUs2cizns53APyjb9S1RkDPWeUFqJqkyRJIQ4pmAYlNhSGvZu8xCaxjBGQekUjOgR+gv9maOyILRVgqp2MJlClqeQSmwNY6JFJOzaWAph8qss1VoYWkPYGtoF/U9kNUNrOPa5RWEsUim2lynemi6C03Uf2ulUfCqdrzo1K+d8DWHBlNY4jn/Y7TaNmpowDoSD2yHLHi9LJILfQ0twIRat+cfpaDCdCvR9j6fzBXXlkBsBa3Po7IFBXlgopRB1FcPzSJiOGabpjMGdICW/q2AuU3GTUr60nXvrx8HXdeu7evS2aHxluG8q6xvX+7p1/jAcvbWl/wYfsMGQJfFvyQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 09\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/d9199/001-09.png\"\n        srcset=\"/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/8ff5a/001-09.png 240w,\n/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/e85cb/001-09.png 480w,\n/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/d9199/001-09.png 960w,\n/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/07a9c/001-09.png 1440w,\n/devHistoryBlog/static/12a145746b2afb751f6adaabafcb2dcc/bce1e/001-09.png 1696w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<br/>\n<p><span class=\"title__sub2\"> 2) 양방향 연관관계 주의 </span></p>\n<ul>\n<li>순수 객체 상태를 고려해야 상항 양쪽에 값을 설정\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/1b3d68050c0b6dfe020b518f504c9966/2e367/001-10.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 45.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABcRAAAXEQHKJvM/AAACb0lEQVQoz1WPy08TURTG79K9O/0HTFp2MJ2ZznSmM/fOoy2lFXfGGGI00Y1CH6AJxEAjiBIQiRYf8Q8wsaELTUzEFyDSdgoincICkyaYdoEuZMW0HO80kcTFL9/JzXfO/T50cHCQ29vby+3v/6L6M1ev13ONRiPnOE4OAPKUM41GHdVqtVK1aoNt281KpeJqm+3t7ba6b7u7u4DS6UFIpdOQSiUhnUrA4NAQJBKJY5LJZGB45DaKdEeteO85iMXjzVjUhNjZOJimARhjIIS0cWfkFyVHVrATkGRHEHwOwzJOh9d76PF4XMDr9XIBKYiCCraIbgDRzSYmGASBB5ZlgWGY/0CRaAzMUBjCVHWdgEZkuqQfSQHxiOd5EESR74n3Ik03LQroRqh9ECsiaIYBUiAAHMcdgxQVN1WMmxiTZjAoNxVVphp0qNHx+/1uCi4ciSIVk2IoHIFwd8+hYYZaRNdammG2ZFlucRzbYjmOKteiVVTQ2lUMoMcBE92tBaqqgpuQmsTuWBxhTd9y27heerQNDQGiKALvfvwvIVbV17qq5g1C8qam5QWWyfNMV57r6lzgfcwbmtCjBBUkSfIroig2ZY36iiLPFtmuzqLA+oo8wxT9PqbIsj4bDcw8uXhl/MHkpcz0aGr2WebmoxeZa5NzY4NzzyduTGcTq9+rJ+ZfLqDL/alTF26NTfWNjD89PzT6uH9yNjtw72G2b/hO9vrETPZq5v788N2pDrS8vvnlk/UNPpc34f1aCRZXC7C8sQVLdF6yNn6XK9WTK9Y6suyd0+8K5T+LhTIsFtbh7coa5St8KNHd0gZ8pNg/atxfBw9136rWU9YAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 10\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/1b3d68050c0b6dfe020b518f504c9966/d9199/001-10.png\"\n        srcset=\"/devHistoryBlog/static/1b3d68050c0b6dfe020b518f504c9966/8ff5a/001-10.png 240w,\n/devHistoryBlog/static/1b3d68050c0b6dfe020b518f504c9966/e85cb/001-10.png 480w,\n/devHistoryBlog/static/1b3d68050c0b6dfe020b518f504c9966/d9199/001-10.png 960w,\n/devHistoryBlog/static/1b3d68050c0b6dfe020b518f504c9966/2e367/001-10.png 1066w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n<li>연관관계 편의 메소드를 생성하자</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@OneToMany</span><span class=\"token punctuation\">(</span>mappedBy <span class=\"token operator\">=</span> <span class=\"token string\">\"member\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">private</span> <span class=\"token class-name\">List</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Member</span><span class=\"token punctuation\">></span></span> memberList <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">ArrayList</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">addMember</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Member</span> member<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 양반향 연관관계 매핑</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>memberList<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>member<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    member<span class=\"token punctuation\">.</span><span class=\"token function\">updateTeam</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li>양방향 매핑시에 무한 루프를 조심하자<br>\n— ex) toString(), lombok, JSON 생성 라이브러리</li>\n</ul>","fields":{"tagSlugs":["/tags/jpa/"],"slug":"/history/posts/2021-01-28--001"},"frontmatter":{"title":"엔티티 매핑","tags":["jpa"],"date":"2021-01-28","description":"자바 ORM 표준 JPA 프로그래밍 강의 복습"}}},"pageContext":{"slug":"/history/posts/2021-01-28--001"}},"staticQueryHashes":[]}