Spring Data JPAを使用したPostgreSQLの処理
PostgreSQLの特殊なデータ型
通常使用されるMySQLとは異なり、PostgreSQLでは複数のデータ型がサポートされています.たとえば、配列タイプ、JSONタイプ、JSONバイナリタイプなどをサポートします.
ただし、JPAのインプリメンテーションチェーンHibernateでは、このデータ型のデフォルトのカラムタイプはサポートされていないため、使用するにはカラムタイプを定義し、使用するカラムタイプにマッピングする必要があります.
Hypernetユーザー定義のデータ型のマッピング
カラムタイプを定義するには、UserTypeインタフェースを実装します.しかし、これは非常に面倒なことなので、ライブラリを使用します.UserTypeを直接実装する場合は、ここです。を参照してください.
依存性
implementation("com.vladmihalcea:hibernate-types-52:2.16.0")
インプリメンテーション
import com.vladmihalcea.hibernate.type.array.ListArrayType
import org.hibernate.annotations.TypeDef
import javax.persistence.*
import org.hibernate.annotations.Type
@Entity
@TypeDef(name="list-int", typeClass = ListArrayType::class)
class Summoner(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
val id: Long? = null,
@Column(nullable = false)
val puuid: String,
@Column(nullable = false)
var name: String,
@Column(nullable = true)
var recentMatchId: String,
@Type(type = "list-int")
@Column(columnDefinition = "integer[]")
var analysisResults: List<Int>
)
まず、@TypeDef
言語記述を使用してカラムタイプを定義し、サポートされていないカラムタイプを定義する場合、@Type
言語記述を使用して上記で定義したカラムタイプを指定し、@Column
言語記述がデータベースに入るカラムタイプを定義し、HyperNateがサポートしていないカラムクラスタイプList<Int>
およびPostgreを定義します.SQLのinteger[]
がマッピングされています.テスト
@SpringBootTest
class SummonerRepositoryTest(
@Autowired private val summonerRepository: SummonerRepository
) {
@AfterEach
fun tearDown(){
summonerRepository.deleteAll()
}
@Test
@DisplayName("Create 테스트")
fun createTest() {
// given
val puuid = "puuid"
val name = "쳇바퀴 속 다람쥐"
val recentMatchId = "match_id"
val analysisResult = listOf(1,4,5,6)
val summoner = Summoner(
puuid = puuid, name = name, recentMatchId = recentMatchId, analysisResults = analysisResult
)
// when
val result = summonerRepository.save(summoner)
// then
println(result.id)
assertThat(result.puuid).isEqualTo(puuid)
assertThat(result.name).isEqualTo(name)
assertThat(result.recentMatchId).isEqualTo(recentMatchId)
assertThat(result.analysisResults).isEqualTo(analysisResult)
}
}
テストを実行すると、新しいエンティティの挿入が正常であることを確認できます.リファレンス
https://vladmihalcea.com/postgresql-array-java-list/
https://www.baeldung.com/hibernate-custom-types
Reference
この問題について(Spring Data JPAを使用したPostgreSQLの処理), 我々は、より多くの情報をここで見つけました https://velog.io/@tkppp-dev/PostgreSQL을-Spring-Data-JPA-로-다루기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol