{"id":1578,"date":"2021-01-19T19:46:02","date_gmt":"2021-01-19T10:46:02","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1578"},"modified":"2021-01-24T23:11:17","modified_gmt":"2021-01-24T14:11:17","slug":"jpa-%ea%b8%b0%eb%b3%b8%ea%b0%92-%eb%b3%80%ea%b2%bd%eb%90%9c-%ed%95%84%eb%93%9c%eb%a7%8c-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1578","title":{"rendered":"JPA \uae30\ubcf8\uac12, \ubcc0\uacbd\ub41c \ud544\ub4dc\ub9cc \uc5c5\ub370\uc774\ud2b8"},"content":{"rendered":"<h1>JPA \uae30\ubcf8\uac12, \ubcc0\uacbd\ub41c \ud544\ub4dc\ub9cc \uc5c5\ub370\uc774\ud2b8<\/h1>\n<h2>JPA \uae30\ubcf8\uac12<\/h2>\n<p><code>@ColumnDefault(&quot;0&quot;)<\/code> \uacfc <code>@Column(nullable = false)<\/code> \ub294 \ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8 \uc0dd\uc131\uc5d0\ub9cc \uad00\uc5ec\ud55c\ub2e4.<\/p>\n<p>insert \uac12\uc774 null \uc778 \uacbd\uc6b0 \uae30\ubcf8\uac12\uc73c\ub85c \uc790\ub3d9\uc785\ub825 \ud574\uc8fc\ub294 \uae30\ub2a5\uc740 \uc5c6\ub2e4.<\/p>\n<p><code>private Integer likeCount = 0;<\/code> \uacfc \uac19\uc774 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Entity\n@Getter\n@Setter\n@Table(name = &quot;MEDIA&quot;)\n@NoArgsConstructor\npublic class Media {\n\n    @Id\n    @GeneratedValue(strategy = IDENTITY)\n    @Column(name = &quot;idx&quot;)\n    private Long idx;\n\n    @ColumnDefault(&quot;0&quot;)\n    @Column(nullable = false)\n    private Integer likeCount = 0;\n\n    @NotNull\n    @ColumnDefault(&quot;0&quot;)\n    private BigDecimal price = BigDecimal.ZERO;\n\n    @Builder\n    public Media(Integer likeCount) {\n        this.likeCount = likeCount;\n    }\n}<\/code><\/pre>\n<p><code>@Column(nullable = false)<\/code> \uc740 \ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8 \uc0dd\uc131\uc5d0\ub9cc \uad00\uc5ec\ud55c\ub2e4.<\/p>\n<p>null \uac12 \uccb4\ud06c\ub294 \uc2e4\uc81c\ub85c insert \ud558\ub294 \uc2dc\uc810\uc5d0 DB \uc5d0\uc11c \uccb4\ud06c\ub41c\ub2e4.<\/p>\n<p><code>@NotNull<\/code> \uc740 DB \uc5d0\uc11c \uccb4\ud06c\ub418\ub294 \uac83\uc774 \uc544\ub2c8\ub77c, JPA \uc5d0\uc11c \uccb4\ud06c\ub41c\ub2e4. \ub610\ud55c \uc544\ub798 \uc758\uc874\uc131\uc774 \ucd94\uac00\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<pre><code class=\"language-groovy\">dependencies {\n    \/\/ ......\n    compile(&#039;org.springframework.boot:spring-boot-starter-validation&#039;)\n    \/\/ ......\n}<\/code><\/pre>\n<h2>\ubcc0\uacbd\ub41c \ud544\ub4dc\ub9cc \uc5c5\ub370\uc774\ud2b8<\/h2>\n<p>JPA \ub294 null \uac12\uc774 \uba85\uc2dc\uc801\uc73c\ub85c null \uac12\uc73c\ub85c \uc124\uc815\ud558\ub294 \uac83\uc778\uc9c0 \uc544\ub2c8\uba74 \ub2e8\uc9c0 \uac12\uc744 \uc785\ub825\ud558\uc9c0 \uc54a\uc544 null \uc778\uc9c0\ub97c \uad6c\ubd84\ud558\uc9c0 \ubabb\ud55c\ub2e4.<\/p>\n<p>\ubcc0\uacbd\uc774 \ud544\uc694\ud55c \ud544\ub4dc\ub97c \uc5c5\ub370\uc774\ud2b8 \ud558\ub824\uba74, PK \ub97c \uc774\uc6a9\uc5d0 Entity \uc804\uccb4\ub97c \ubd88\ub7ec\uc640\uc11c, \ubcc0\uacbd\uc774 \ud544\uc694\ud55c \ud544\ub4dc\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8(\ucf54\ub529)\ud574\uc57c \ud55c\ub2e4.<\/p>\n<h2>null \uc774 \uc544\ub2cc \ud544\ub4dc\ub9cc \uc5c5\ub370\uc774\ud2b8 \ud558\uae30<\/h2>\n<p><code>mapstruct<\/code> \ub97c \uc774\uc6a9\ud574 null \uc774 \uc544\ub2cc \ud544\ub4dc\ub9cc \uc5c5\ub370\uc774\ud2b8 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc544\ub798\uc758 \uc758\uc874\uc131\uc774 \ucd94\uac00\ub85c \ud544\uc694\ud558\ub2e4.<\/p>\n<pre><code class=\"language-groovy\">dependencies {\n    \/\/ ......\n    implementation &#039;org.mapstruct:mapstruct:1.4.1.Final&#039;\n    annotationProcessor &#039;org.mapstruct:mapstruct-processor:1.4.1.Final&#039;\n    \/\/ ......\n}<\/code><\/pre>\n<p>Dto \ub294 \ubc18\ub300\ub85c \ub514\ud3f4\ud2b8 \uac12 \uc124\uc815\uc744 \ud558\uba74 \uc548\ub41c\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Setter\n@Getter\n@NoArgsConstructor\npublic class MediaDto {\n\n    private Long idx;\n    private Integer likeCount;\n    private BigDecimal price;\n}<\/code><\/pre>\n<p>\ub9e4\ud551\uc2dc null \uc778 \ud544\ub4dc\ub97c \ubb34\uc2dc\ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">@Mapper(componentModel = &quot;spring&quot;)\npublic interface MediaMapper {\n\n    @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)\n    void updateMediaFromDto(MediaDto dto, @MappingTarget Media entity);\n}<\/code><\/pre>\n<pre><code class=\"language-java\">    @Test\n    public void test2() {\n\n        Media media = new Media();\n        Media resultMedia = mediaRepository.save(media);\n\n        MediaDto mediaDto = new MediaDto();\n        mediaDto.setPrice(BigDecimal.valueOf(5000));\n\n        mediaMapper.updateMediaFromDto(mediaDto, resultMedia);\n        Media resultMedia2 = mediaRepository.save(media);\n\n        MatcherAssert.assertThat(resultMedia2.getPrice(), Is.is(BigDecimal.valueOf(5000)));\n    }<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>JPA \uae30\ubcf8\uac12, \ubcc0\uacbd\ub41c \ud544\ub4dc\ub9cc \uc5c5\ub370\uc774\ud2b8 JPA \uae30\ubcf8\uac12 @ColumnDefault(&quot;0&quot;) \uacfc @Column(nullable = false) \ub294 \ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8 \uc0dd\uc131\uc5d0\ub9cc \uad00\uc5ec\ud55c\ub2e4. insert \uac12\uc774 null \uc778 \uacbd\uc6b0 \uae30\ubcf8\uac12\uc73c\ub85c \uc790\ub3d9\uc785\ub825 \ud574\uc8fc\ub294 \uae30\ub2a5\uc740 \uc5c6\ub2e4. private Integer likeCount = 0; \uacfc \uac19\uc774 \uae30\ubcf8\uac12\uc744 \uc124\uc815\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4. @Entity @Getter @Setter @Table(name = &quot;MEDIA&quot;) @NoArgsConstructor public class Media { @Id @GeneratedValue(strategy = IDENTITY) @Column(name =\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1578\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,1],"tags":[],"class_list":["post-1578","post","type-post","status-publish","format-standard","hentry","category-spring-boot-2-1","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1578"}],"version-history":[{"count":4,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1578\/revisions"}],"predecessor-version":[{"id":1584,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1578\/revisions\/1584"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}