Kotlin Springboot -- JPA, 최대 절전 모드, h2 DB の初期設定に失敗
参考
https://spring.io/guides/tutorials/spring-boot-kotlin/
Spring 公式の츄트리알
H2 DB を使うMERITT
https://m12i.hatenablog.com/entry/2014/10/29/010801
永続的なストレージとしては機能しない.
つまりアプリの起動のたびに初期化される.
組み込みとして追加できる.
( なので psql サーバーを Docker 에서 立てて )
URL ( と認証 ) 書いて接続する手間が省ける.
と書いてあった.
H2는 인메모리노 DB 이다.
依存関係を書けばそのまま使えるらしいので導入してみる
Gradle で JPA を同居させて Spring を動かす
Maven の場合は POM に書く
build.gradle.kts の 플러그인 に jpa を追加
kotlin("plugin.jpa") version "1.6.21"
pragin と し て jpa を使えるようにする
Null로 바그루 문제 対策
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
}
}
コンピイラに指定のoptionをつける
종속성 に h2 を追加
dependencies {
// ...
runtimeOnly("com.h2database:h2")
}
런타임 だけ h2 を動かす
ランタイムっていうのが SpringBootApp が起動して落ちるまでの間と解釈する.
application.properties 에 H2 用の設定を追加
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
spring.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions = true
application.properties に h2 の設定が必要.
https://m12i.hatenablog.com/entry/2014/10/29/010801
Spring の Hibernate の entitiimane-ja-ga- この 変数 와 値 が 渡 されるらしい.
調べたけど全くわからないので、この
global_quoted_identifiers
global_quoted_identifiers_skip_column_definitions
2 つの値の true の設定はおまじないとしておく.
컨트롤러 とtestを書く
省略
H2 DB を(Inmemoriの範囲で)永続化させる
allopen を프라그인에 追加
ENTITYを全てopenにして오카나이와
lazy-fetch が使えないので永続化できないらしい.
kotlin("plugin.allopen") version "1.6.21"
allopen を 플러그인 に追加して
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}
엔터티, Embeddable, MappedSuperclass,
これらの永続化用のannotation도 import できるように読み込んでおく
Entity を作成
これを元に DB のテーブルが作成されると予想する.
컨트롤러 と並列に Entities.kt というファイルを作り
import javax.persistence.GeneratedValue
import javax.persistence.Id
class Article (
var title: String,
var slug: String = title.toSlug(),
@Id
@GeneratedValue
var id: Long? = null)
自動生成の ID と String の Title だけを作る
Javax の Persisitence ( 耐久? ) の ライブラリを使う
Repository を作成
JPA を使った Driver だと解釈する.
import org.springframework.data.repository.CrudRepository
interface ArticleRepository : CrudRepository<Article, Long> {
fun findByTitle(title: String): Article?
}
同じく 컨트롤러 並列に 리포지토리 を作成
findBy{ColumnName}(ColumnName: type)
JPA を使って値が取れると解釈する
Repository のtestを作成できない
Testでーデータをいれるようだ
しかし読み込みが全くうまく行かなかった
@DataJpaTest
Class RepositoryTests @Autowired constructor (
val entityManager: TestEntityManager,
val articleRepository: ArticleRepository) {
@Test
fun `When findByIdOrNull then return Article`() {
val article = Article("Spring Framework 5.0 goes GA", "2")
entityManager.persist(article)
entityManager.flush()
val found = articleRepository.findByTitle(article.title)
assertThat(found).isEqualTo(article)
}
}
)
まず、import たちのちょくごにこのアノテーションを書いても
최고 수준의 정의 기대 と
toppに宣言しろとエラーがでるし
@Test
も エラーがでる関数の書き方が違うと.
関数名がないと言われる.
https://stackoverflow.com/a/51894673
@SpringbootApplication
가
main で呼ばれているからtopでないと言われているかもしれない?
要検証
Reference
이 문제에 관하여(Kotlin Springboot -- JPA, 최대 절전 모드, h2 DB の初期設定に失敗), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/kaede_io/kotlin-springboot-jpa-hibernate-h2-db-nochu-qi-she-ding-nishi-bai-4bk3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
kotlin("plugin.jpa") version "1.6.21"
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
}
}
dependencies {
// ...
runtimeOnly("com.h2database:h2")
}
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
spring.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions = true
allopen を프라그인에 追加
ENTITYを全てopenにして오카나이와
lazy-fetch が使えないので永続化できないらしい.
kotlin("plugin.allopen") version "1.6.21"
allopen を 플러그인 に追加して
allOpen {
annotation("javax.persistence.Entity")
annotation("javax.persistence.Embeddable")
annotation("javax.persistence.MappedSuperclass")
}
엔터티, Embeddable, MappedSuperclass,
これらの永続化用のannotation도 import できるように読み込んでおく
Entity を作成
これを元に DB のテーブルが作成されると予想する.
컨트롤러 と並列に Entities.kt というファイルを作り
import javax.persistence.GeneratedValue
import javax.persistence.Id
class Article (
var title: String,
var slug: String = title.toSlug(),
@Id
@GeneratedValue
var id: Long? = null)
自動生成の ID と String の Title だけを作る
Javax の Persisitence ( 耐久? ) の ライブラリを使う
Repository を作成
JPA を使った Driver だと解釈する.
import org.springframework.data.repository.CrudRepository
interface ArticleRepository : CrudRepository<Article, Long> {
fun findByTitle(title: String): Article?
}
同じく 컨트롤러 並列に 리포지토리 を作成
findBy{ColumnName}(ColumnName: type)
JPA を使って値が取れると解釈する
Repository のtestを作成できない
Testでーデータをいれるようだ
しかし読み込みが全くうまく行かなかった
@DataJpaTest
Class RepositoryTests @Autowired constructor (
val entityManager: TestEntityManager,
val articleRepository: ArticleRepository) {
@Test
fun `When findByIdOrNull then return Article`() {
val article = Article("Spring Framework 5.0 goes GA", "2")
entityManager.persist(article)
entityManager.flush()
val found = articleRepository.findByTitle(article.title)
assertThat(found).isEqualTo(article)
}
}
)
まず、import たちのちょくごにこのアノテーションを書いても
최고 수준의 정의 기대 と
toppに宣言しろとエラーがでるし
@Test
も エラーがでる関数の書き方が違うと.関数名がないと言われる.
https://stackoverflow.com/a/51894673
@SpringbootApplication
가main で呼ばれているからtopでないと言われているかもしれない?
要検証
Reference
이 문제에 관하여(Kotlin Springboot -- JPA, 최대 절전 모드, h2 DB の初期設定に失敗), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/kotlin-springboot-jpa-hibernate-h2-db-nochu-qi-she-ding-nishi-bai-4bk3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)