{"id":1587,"date":"2021-01-24T23:43:51","date_gmt":"2021-01-24T14:43:51","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1587"},"modified":"2021-01-31T16:06:04","modified_gmt":"2021-01-31T07:06:04","slug":"%eb%bb%98%ec%a7%93%ea%b1%b0%eb%a6%ac-%eb%aa%a8%ec%9d%8c","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1587","title":{"rendered":"JAVA \ubed8\uc9d3\uac70\ub9ac \ubaa8\uc74c"},"content":{"rendered":"<h1>\ubed8\uc9d3\uac70\ub9ac \ubaa8\uc74c<\/h1>\n<p>\ubed8\uc9d3\uac70\ub9ac\ub97c \ubaa8\uc544 \ubcf4\uc790.<\/p>\n<h2>Spring Boot JPA \uad00\ub828<\/h2>\n<h3>readOnly = true<\/h3>\n<p><code>(readOnly = true)<\/code> \ubd99\uc5ec\ub193\uace0 \uc5c5\ub370\uc774\ud2b8 \ub418\uae38 \ubc14\ub77c\ub294 \ud589\uc704.<\/p>\n<pre><code class=\"language-java\">@Service\npublic class ApiAccessInfoService extends CustomGenericService&lt;ApiAccessInfoDto, ApiAccessInfo, ApiAccessInfoKeyDto, ApiAccessInfoKey&gt; {\n\n    \/\/ ......\n\n    @Override\n    @Transactional(readOnly = true)\n    @CacheEvict(value=&quot;ApiAccessInfo&quot;)\n    public void update(ApiAccessInfoKeyDto id, ApiAccessInfoDto apiAccessInfoDto) {\n        super.update(id, apiAccessInfoDto);\n    }\n}<\/code><\/pre>\n<h3>PK \uc218\uc815 \uc2dc\ub3c4<\/h3>\n<p>PK \ub97c \uc218\uc815\ud558\ub824 \ud558\uba74 \uc815\ub9d0 \uc774\uc0c1\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n<pre><code class=\"language-java\">@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)\npublic class ApiAccessInfoApiControllerTest {\n\n    ApiAccessInfoKeyDto keyDto;\n\n    @BeforeEach\n    public void setUp() throws Exception {\n\n        \/\/ ......\n\n        keyDto = new ApiAccessInfoKeyDto();\n        String accessId = &quot;skyer91&quot;;\n        String accessKey = &quot;12345678&quot;;\n        String accessIp = &quot;127.0.0.1&quot;;\n        keyDto.setAccessId(accessId);\n        keyDto.setAccessKey(accessKey);\n        keyDto.setAccessIp(accessIp);\n    }\n\n   \/\/ ......\n\n    @Test\n    public void update() throws URISyntaxException, JsonProcessingException {\n\n        \/\/ given\n        \/\/ ......\n        ApiAccessInfoDto saved = getTestData(keyDto);\n        if (saved == null) {\n            saved = createTestData(keyDto);\n        }\n\n        assert saved != null;\n        saved.setAccessKey(&quot;1111&quot;);\n\n        \/\/ ......\n    }\n}<\/code><\/pre>\n<h3>Transactional \uc5d0\ub108\ud14c\uc774\uc158 \ub204\ub77d<\/h3>\n<pre><code class=\"language-java\">@Service\npublic class DailyStockSummaryService {\n\n    \/\/ @Transactional\n    public void applyStockChange(StockChangeDto stockChangeDto) {\n        \/\/ ......\n        repository.save(entity);\n    }\n    \/\/ ......\n}<\/code><\/pre>\n<p>\ud2b8\ub79c\uc81d\uc158\uc774 \ubcf4\uc7a5\ub418\uc9c0 \uc54a\uc73c\uba74 \uc774\ubbf8 select \ud574 \ub193\uc740 \ub370\uc774\ud0c0\uac00 \uc0ad\uc81c\ub418\uc9c0 \uc54a\uc558\uc74c\uc5d0 \ub300\ud55c \ubcf4\uc7a5\uc774 \uc5c6\uc73c\ubbc0\ub85c, \ub9e4\ubc88 \uc0c8\ub85c select \ud558\uac8c \ub41c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ubed8\uc9d3\uac70\ub9ac \ubaa8\uc74c \ubed8\uc9d3\uac70\ub9ac\ub97c \ubaa8\uc544 \ubcf4\uc790. Spring Boot JPA \uad00\ub828 readOnly = true (readOnly = true) \ubd99\uc5ec\ub193\uace0 \uc5c5\ub370\uc774\ud2b8 \ub418\uae38 \ubc14\ub77c\ub294 \ud589\uc704. @Service public class ApiAccessInfoService extends CustomGenericService&lt;ApiAccessInfoDto, ApiAccessInfo, ApiAccessInfoKeyDto, ApiAccessInfoKey&gt; { \/\/ &#8230;&#8230; @Override @Transactional(readOnly = true) @CacheEvict(value=&quot;ApiAccessInfo&quot;) public void update(ApiAccessInfoKeyDto id, ApiAccessInfoDto apiAccessInfoDto) { super.update(id, apiAccessInfoDto); } } PK \uc218\uc815 \uc2dc\ub3c4 PK \ub97c \uc218\uc815\ud558\ub824 \ud558\uba74\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1587\">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":[8],"tags":[],"class_list":["post-1587","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1587","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=1587"}],"version-history":[{"count":9,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1587\/revisions"}],"predecessor-version":[{"id":1624,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1587\/revisions\/1624"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}