코틀린/JPA

코틀린에서의 Optional Optional은 자바에서 null 관련 처리를 해주기 위해 등장하였습니다. 그러나 코틀린에서는 nullable 타입을 따로 처리하므로 Optional을 사용할 필요가 없습니다. 예를 들어 Optional.orElse() 등은 엘비스 연산자를 통해 대체할 수 있습니다. ifPresent도 let을 통해 대체할 수 있습니다. 따라서 코틀린에서는 Optional을 잘 사용하지 않습니다. 코틀린을 위한 JPA 확장 함수 findById 메서드는 Optional을 반환합니다. 코틀린에서는 Optional을 사용하지 않기 위해 findByIdOrNull 이라는 확장함수를 제공합니다. 다음과 같이 사용할 수 있습니다. 메서드를 추가하는 경우 반환 타입을 Nullable 타입으로만 설정..
코틀린에서 @OneToMany 사용 시 다음과 같은 오류가 발생하는 경우가 있습니다. org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: 발생하는 코드는 다음과 같습니다. @Entity @Table(name = "parent_category") @DiscriminatorValue("P") class ParentCategory( @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY) var child: List = ArrayList(), name: String, ) : MyCategory(name = name) { } 원인..
코틀린에서는 기본적으로 모든 클래스와 프로퍼티가 final입니다. 이로 인해 JPA를 사용할 때 지연로딩을 사용하기 위해서는 모든 클래스와 프로퍼티에 open을 붙여주어야 하는데 이는 꽤나 귀찮습니다. 이를 해결하기 위해 all-open 플러그인을 사용할 수 있습니다. 스프링을 사용한다면 기본적으로 plugin.spring을 통해 몇몇 어노테이션들에 all-open이 적용됩니다. 그러나 @Entity에는 기본적으로 all-open이 적용되지 않으므로 따로 설정을 해주어야 합니다. 다음과 같이 allOpen을 build.gradle 파일에 추가합니다. plugins { kotlin("plugin.jpa") version "1.6.21" } allOpen { annotation("javax.persisten..
말 랑
'코틀린/JPA' 카테고리의 글 목록