코틀린

자바에서 Querydsl을 사용하여 동적으로 정렬 조건을 생성하기 위해서는 다음과 같은 코드를 작성하면 됩니다. for (Sort.Order o : pageable.getSort()) { PathBuilder pathBuilder = new PathBuilder(member.getType(),member.getMetadata()); query.orderBy( new OrderSpecifier( o.isAscending() ? Order.ASC : Order.DESC, pathBuilder.get(o.getProperty()) ) ); } 그러나 해당 코드를 아래와 같이 코틀린으로 변환하면 오류가 뜨면서 컴파일되지 않습니다. for (o in pageable.sort) { val pathBuilder = ..
정확히는 모르겠습니다만, 원인은 KotlinModule때문인 것 같습니다. (아마 그럴 것 같습니다..ㅜㅠㅜ) 비슷한 글로 다음 블로그도 참고하시면 좋을 것 같습니다. (https://kapentaz.github.io/kotlin/json/Kotlin-and-Jackson-(ObjectMapper)/) 저는 stackoverflow 뒤지다가 저와 동일한 문제는 아니었지만 ObjectMapper에 KotlinModule을 설정해 주는 코드를 발견했습니다. 혹시나 해서 확인해보니, KotlinModule이 있다면 기본 생성자 없이 deserialize가 가능하다는 사실을 알게되었습니다. 저의 코드는 다음과 같았습니다. data class CreateMemberRequest( @field:NotEmpty va..
코틀린에서의 Optional Optional은 자바에서 null 관련 처리를 해주기 위해 등장하였습니다. 그러나 코틀린에서는 nullable 타입을 따로 처리하므로 Optional을 사용할 필요가 없습니다. 예를 들어 Optional.orElse() 등은 엘비스 연산자를 통해 대체할 수 있습니다. ifPresent도 let을 통해 대체할 수 있습니다. 따라서 코틀린에서는 Optional을 잘 사용하지 않습니다. 코틀린을 위한 JPA 확장 함수 findById 메서드는 Optional을 반환합니다. 코틀린에서는 Optional을 사용하지 않기 위해 findByIdOrNull 이라는 확장함수를 제공합니다. 다음과 같이 사용할 수 있습니다. 메서드를 추가하는 경우 반환 타입을 Nullable 타입으로만 설정..
코틀린으로 @Valid를 처음 사용한다면, 아마 다들 @Valid가 동작하지 않아서 해결 방법을 찾으실 거라 생각합니다. 오늘은 해당 해결 방법을 알아보도록 하겠습니다. 먼저 작동하지 않는 코드부터 살펴보겠습니다. @Controller class MemberController( private val memberService: MemberService, ) { @GetMapping("/members/new") fun createForm(model: Model): String { model.addAttribute("memberForm", MemberForm("","","","")) return "members/createMemberForm" } @PostMapping("/members/new") fun cr..
코틀린에서 @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..
종종 코틀린에서 타입 토큰을 필요로 하는 상황이 있습니다. 저의 경우 다음과 같은 상황이었습니다. 그러나 보이시는 것 처럼 오류가 발생하였습니다. 코틀린에서 getClass()를 사용하기 위해서는 다음과 같이 사용하여야 합니다. Reference https://kotlinlang.org/docs/java-interop.html#clone Calling Java from Kotlin | Kotlin kotlinlang.org
말 랑
'코틀린' 카테고리의 글 목록