<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev-kmson.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 21 Aug 2022 16:17:48 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dev-kmson.log</title>
            <url>https://velog.velcdn.com/images/dev-kmson/profile/b44e3f19-88c5-49cb-8b0c-c65aae60c4d5/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dev-kmson.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev-kmson" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Spring Boot + MyBatis 환경설정]]></title>
            <link>https://velog.io/@dev-kmson/Spring-Boot-MyBatis-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@dev-kmson/Spring-Boot-MyBatis-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</guid>
            <pubDate>Sun, 21 Aug 2022 16:17:48 GMT</pubDate>
            <description><![CDATA[<h2 id="applicationyml-설정">application.yml 설정</h2>
<pre><code class="language-yml">spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/jpa_study
    username: jpa_user
    password: jpa_user
    driver-class-name: org.postgresql.Driver

mybatis:
  # 지정한 패키지 경로 내의 도메인 객체 mapping 시 패키지 경로 생략 가능
  type-aliases-package: package path
  configuration:
    # camel-case 변환
    map-underscore-to-camel-case: true
  # 지정한 경로 내 xml 파일을 mapper xml로 인식  
  mapper-locations: classpath:mapper/**/*.xml</code></pre>
<h2 id="buildgradle-설정">build.gradle 설정</h2>
<pre><code class="language-java">
plugins {
    id &#39;org.springframework.boot&#39; version &#39;2.6.5&#39;
    id &#39;io.spring.dependency-management&#39; version &#39;1.0.11.RELEASE&#39;
    id &#39;java&#39;
}

group = &#39;com.example&#39;
version = &#39;0.0.1-SNAPSHOT&#39;
sourceCompatibility = &#39;11&#39;

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation &#39;org.springframework.boot:spring-boot-starter-thymeleaf&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-web&#39;

    // MyBatis
    implementation &#39;org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2&#39;


    runtimeOnly &#39;org.postgresql:postgresql&#39;

    testImplementation &#39;org.springframework.boot:spring-boot-starter-test&#39;

    compileOnly &#39;org.projectlombok:lombok&#39;
    annotationProcessor &#39;org.projectlombok:lombok&#39;

    //테스트에서 lombok 사용
    testCompileOnly &#39;org.projectlombok:lombok&#39;
    testAnnotationProcessor &#39;org.projectlombok:lombok&#39;
}

tasks.named(&#39;test&#39;) {
    useJUnitPlatform()
}
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Boot + JdbcTemplate 환경설정]]></title>
            <link>https://velog.io/@dev-kmson/Spring-Boot-JdbcTemplate-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@dev-kmson/Spring-Boot-JdbcTemplate-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</guid>
            <pubDate>Sun, 21 Aug 2022 10:06:28 GMT</pubDate>
            <description><![CDATA[<h2 id="applicationyml-설정">application.yml 설정</h2>
<pre><code class="language-yml">spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/jpa_study
    username: jpa_user
    password: jpa_user
    driver-class-name: org.postgresql.Driver

# JdbcTemplate logging level
logging:
  level:
    org:
      springframework:
        jdbc: debug</code></pre>
<h2 id="buildgradle-설정">build.gradle 설정</h2>
<pre><code class="language-java">
plugins {
    id &#39;org.springframework.boot&#39; version &#39;2.6.5&#39;
    id &#39;io.spring.dependency-management&#39; version &#39;1.0.11.RELEASE&#39;
    id &#39;java&#39;
}

group = &#39;com.example&#39;
version = &#39;0.0.1-SNAPSHOT&#39;
sourceCompatibility = &#39;11&#39;

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation &#39;org.springframework.boot:spring-boot-starter-thymeleaf&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-web&#39;
    // JdbcTemplate
    implementation &#39;org.springframework.boot:spring-boot-starter-jdbc&#39;

    runtimeOnly &#39;org.postgresql:postgresql&#39;

    testImplementation &#39;org.springframework.boot:spring-boot-starter-test&#39;

    compileOnly &#39;org.projectlombok:lombok&#39;
    annotationProcessor &#39;org.projectlombok:lombok&#39;

    //테스트에서 lombok 사용
    testCompileOnly &#39;org.projectlombok:lombok&#39;
    testAnnotationProcessor &#39;org.projectlombok:lombok&#39;
}

tasks.named(&#39;test&#39;) {
    useJUnitPlatform()
}
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Boot + Query DSL 환경설정]]></title>
            <link>https://velog.io/@dev-kmson/Spring-Boot-Query-DSL-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@dev-kmson/Spring-Boot-Query-DSL-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</guid>
            <pubDate>Sat, 02 Jul 2022 16:46:09 GMT</pubDate>
            <description><![CDATA[<h2 id="applicationyml-설정">application.yml 설정</h2>
<pre><code class="language-yml">spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/jpa_study
    username: jpa_user
    password: jpa_user
    driver-class-name: org.postgresql.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        #        show-sql: true
        format_sql: true
        default_batch_fetch_size: 100
    database-platform: org.hibernate.dialect.PostgreSQLDialect

logging:
  level:
    org.hibernate.SQL: debug</code></pre>
<h2 id="buildgradle-설정">build.gradle 설정</h2>
<pre><code class="language-java">plugins {
    id &#39;org.springframework.boot&#39; version &#39;2.7.1&#39;
    id &#39;io.spring.dependency-management&#39; version &#39;1.0.11.RELEASE&#39;
    id &#39;com.ewerk.gradle.plugins.querydsl&#39; version &#39;1.0.10&#39;
    id &#39;java&#39;
}

group = &#39;study&#39;
version = &#39;0.0.1-SNAPSHOT&#39;
sourceCompatibility = &#39;11&#39;

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation &#39;org.springframework.boot:spring-boot-starter-data-jpa&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-web&#39;

    implementation &#39;com.querydsl:querydsl-jpa&#39;
    annotationProcessor &quot;com.querydsl:querydsl-apt:${dependencyManagement.importedProperties[&#39;querydsl.version&#39;]}:jpa&quot;
    annotationProcessor &quot;jakarta.persistence:jakarta.persistence-api&quot;
    annotationProcessor &quot;jakarta.annotation:jakarta.annotation-api&quot;

    compileOnly &#39;org.projectlombok:lombok&#39;
    runtimeOnly &#39;org.postgresql:postgresql&#39;
    annotationProcessor &#39;org.projectlombok:lombok&#39;
    testImplementation &#39;org.springframework.boot:spring-boot-starter-test&#39;

    testCompileOnly &#39;org.projectlombok:lombok&#39;
    testAnnotationProcessor &#39;org.projectlombok:lombok&#39;
}

tasks.named(&#39;test&#39;) {
    useJUnitPlatform()
}

def querydslDir = &quot;$buildDir/generated/querydsl&quot;

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}

sourceSets {
    main.java.srcDir querydslDir
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}</code></pre>
<h2 id="buildgradle-최신-설정">build.gradle 최신 설정</h2>
<pre><code class="language-java">plugins {
    id &#39;org.springframework.boot&#39; version &#39;2.7.2&#39;
    id &#39;io.spring.dependency-management&#39; version &#39;1.0.12.RELEASE&#39;
    id &#39;java&#39;
}

group = &#39;com.sonlog&#39;
version = &#39;0.0.1-SNAPSHOT&#39;
sourceCompatibility = &#39;17&#39;

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation &#39;org.springframework.boot:spring-boot-starter-data-jpa&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-web&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-validation&#39;

    // querydsl 설정 -----------------
    implementation &#39;com.querydsl:querydsl-core&#39;
    implementation &#39;com.querydsl:querydsl-jpa&#39;

    annotationProcessor &quot;com.querydsl:querydsl-apt:${dependencyManagement.importedProperties[&#39;querydsl.version&#39;]}:jpa&quot;
    annotationProcessor &#39;jakarta.persistence:jakarta.persistence-api&#39;
    annotationProcessor &#39;jakarta.annotation:jakarta.annotation-api&#39;
    // ------------------------------

    compileOnly &#39;org.projectlombok:lombok&#39;
    runtimeOnly &#39;org.postgresql:postgresql&#39;
    annotationProcessor &#39;org.projectlombok:lombok&#39;
    testImplementation &#39;org.springframework.boot:spring-boot-starter-test&#39;
    testCompileOnly &#39;org.projectlombok:lombok&#39;
    testAnnotationProcessor &#39;org.projectlombok:lombok&#39;

}

tasks.named(&#39;test&#39;) {
    useJUnitPlatform()
}
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring boot + JPA 환경설정]]></title>
            <link>https://velog.io/@dev-kmson/Spring-boot-JPA-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@dev-kmson/Spring-boot-JPA-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</guid>
            <pubDate>Fri, 27 May 2022 06:47:41 GMT</pubDate>
            <description><![CDATA[<h2 id="applicationyml-설정">application.yml 설정</h2>
<pre><code class="language-yml">spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/jpa_study
    username: jpa_user
    password: jpa_user
    driver-class-name: org.postgresql.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        #        show-sql: true
        format_sql: true
        default_batch_fetch_size: 100
    database-platform: org.hibernate.dialect.PostgreSQLDialect

logging:
  level:
    org.hibernate.SQL: debug</code></pre>
<h2 id="buildgradle-설정">build.gradle 설정</h2>
<pre><code class="language-java">plugins {
    id &#39;org.springframework.boot&#39; version &#39;2.7.0&#39;
    id &#39;io.spring.dependency-management&#39; version &#39;1.0.11.RELEASE&#39;
    id &#39;java&#39;
}

group = &#39;jpabook&#39;
version = &#39;0.0.1-SNAPSHOT&#39;
sourceCompatibility = &#39;11&#39;

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation &#39;org.springframework.boot:spring-boot-starter-data-jpa&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-thymeleaf&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-web&#39;
    implementation &#39;org.springframework.boot:spring-boot-devtools&#39;
    implementation &#39;com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0&#39;
    compileOnly &#39;org.projectlombok:lombok&#39;
    runtimeOnly &#39;org.postgresql:postgresql&#39;
    annotationProcessor &#39;org.projectlombok:lombok&#39;
    testImplementation &#39;org.springframework.boot:spring-boot-starter-test&#39;

    testCompileOnly &#39;org.projectlombok:lombok&#39;
    testAnnotationProcessor &#39;org.projectlombok:lombok&#39;
}

tasks.named(&#39;test&#39;) {
    useJUnitPlatform()
}
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[org.hibernate.PersistentObjectException: detached entity passed to persist 에러]]></title>
            <link>https://velog.io/@dev-kmson/org.hibernate.PersistentObjectException-detached-entity-passed-to-persist-%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@dev-kmson/org.hibernate.PersistentObjectException-detached-entity-passed-to-persist-%EC%97%90%EB%9F%AC</guid>
            <pubDate>Sat, 14 May 2022 10:02:31 GMT</pubDate>
            <description><![CDATA[<h2 id="detached-entity-passed-to-perist-오류-발생">detached entity passed to perist 오류 발생</h2>
<p>JPA 프로젝트에 엔티티를 영속화 및 커밋 시도하니 다음과 같은 에러가 발생하였음</p>
<p><img src="https://velog.velcdn.com/images/dev-kmson/post/957e695b-8d3d-479f-b00e-52fae8aebd88/image.png" alt="">
구글링 결과 CascadeType.ALL 옵션과 관련있는 듯 해보였으나
내 프로젝트에는 관련 옵션이 존재하지 않았음</p>
<p>만일 본인과 같이 CascadeType.ALL 관련 옵션이 없으나 동일한 오류가
발생하였다면 엔티티 클래스에 @Id를 부여한 필드에 @GeneratedValue를
작성하여 AUTO, SEQUENCE, IDENTITY 전략 등 데이터베이스에게
key 값을 자동 생성하도록 하는 전략을 선택하였으면서 엔티티 객체 생성 시
Id에 해당하는 필드에 직접 값을 입력하지 않았는지 확인</p>
<pre><code class="language-java">@Entity
public class Member {

    // 데이터베이스에 키 생성 위임 전략을 취함
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    //...
}</code></pre>
<pre><code class="language-java">Member member = new Member();
// 데이터베이스에 키 생성 전략을 취했으나 엔티티를 생성하면서 key 값을 수동으로 부여함
member.setId(1L);
member.setName(&quot;hello&quot;);</code></pre>
<p>다음과 같이 @Id 필드에 수동으로 키 값을 부여하게 되면 에러가 발생하였음</p>
]]></description>
        </item>
    </channel>
</rss>