DSL for JPA Criteria API without generated metamodel and reflection.

Overview

Kotlin JDSL

Kotlin JDSL is DSL for JPA Criteria API without generated metamodel and reflection. It helps you write a JPA query like writing an SQL statement.

Background

There are several libraries in the easy way to use JPA. However, those libraries have to use APT. If you use APT, there is a problem that you have to compile again when the name or type of entity field is changed. So, in order not to use APT, we created this library using the KProperty created by the kotlin compiler.

Quick start

Hibernate

Add Hibernate Kotlin JDSL and Hibernate to dependencies

dependencies {
    implementation("com.linecorp.kotlin-jdsl:hibernate-kotlin-jdsl:x.y.z")
    implementation("org.hibernate:hibernate-core:x.y.z")
}

Create QueryFactory using EntityManager

val queryFactory: QueryFactory = QueryFactoryImpl(
    criteriaQueryCreator = CriteriaQueryCreatorImpl(entityManager),
    subqueryCreator = SubqueryCreatorImpl()
)

Query using it

queryFactory.listQuery<Entity> {
    select(entity(Book::class))
    from(entity(Book::class))
    where(column(Book::id).equal(1000))
}

Spring Data

If you use Spring Boot & Data Frameworks See more

Usage

You can easily write query using Entity associations.

If you want to return the DTO, use the DTO as the return type.

Query

QueryFactory allows you to create JPA queries using DSL just like SQL queries.

val books: List<Book> = queryFactory.listQuery {
    select(entity(Book::class))
    from(entity(Book::class))
    where(column(Book::author).equal("Shakespeare"))
}

If you want to select the DTO, select columns in the order of constructor parameters.

val books: List<Row> = queryFactory.listQuery {
    select(column(Book::author), count(column(Book::id)))
    from(entity(Book::class))
    groupBy(column(Book::author))
}

Expression

Kotlin JDSL supports various expressions.

Aggregation

val max = max(column(Book::price))
val count = count(column(Book::price))
val greatest = greatest(column(Book::createdAt))

Case When

val case = case(
    `when`(column(Book::name).like("A%")).then(liternal(1)),
    `when`(column(Book::name).like("B%")).then(liternal(2)),
    // ...
    `else` = literal(999)
)

Subquery

val authorIds = queryFactory.subquery<Long> {
    select(column(Book::authorId))
    from(entity(Book::class))
    // ...
}

val authors: List<Author> = queryFactory.listQuery {
    // ...
    where(column(Author::id).`in`(authorIds))
}

Predicate

Kotlin JDSL supports various predicates.

val condition = and(
    column(Book::author).equal("Shakespeare"),
    column(Book::price).lessThanOrEqualTo(100.toBigDecimal()),
    column(Book::status).`in`(SALE, OUT_OF_STOCK),
    column(Book::createdAt).between(Time.of("2001-01-01"), Time.of("2010-12-31")),
)

Join

val books = queryFactory.listQuery<Book> {
    select(entity(Book::class))
    from(entity(Book::class))
    join(Book::author)
    // ...
}

Fetch

val books = queryFactory.listQuery<Book> {
    select(entity(Book::class))
    from(entity(Book::class))
    fetch(Book::author)
    // ...
}

If join and fetch are used together for the same entity, only fetch is applied.

val books = queryFactory.listQuery<Book> {
    select(entity(Book::class))
    from(entity(Book::class))
    join(Book::author) // Join is ignored
    fetch(Book::author) // Only fetch is applied
    // ...
}

Cross Join

val books = queryFactory.listQuery<Book> {
    select(entity(Book::class))
    from(entity(Book::class))
    join(entity(Author::class) on(column(Book::authorId).equal(column(Author::id))))
    // ...
}

Alias

There may be models with the two associations of same type. In this case, separate the Entity using alias.

val orders = queryFactory.listQuery<Order> {
    select(entity(Order::class))
    from(entity(Order::class))
    join(entity(Order::class), entity(Address::class, alias = "shippingAddress", on(Order::shippingAddress)))
    join(entity(Order::class), entity(Address::class, alias = "receiverAddress", on(Order::receiverAddress)))
    // ...
}

How it works

Kotlin's property reference provides KProperty interface. KProperty is created in java file at kotlin compile time. Since KProperty has the name of property, we can use it to write the expression of the Critical API.

If you type the JPA query as below,

queryFactory.listQuery<Book> {
    select(entity(Book::class))
    from(entity(Book::class))
    where(column(Book::name).equal("Hamlet").and(column(Book::author).equal("Shakespeare")))
}

Kotlin compiler creates PropertyReference.

final class ClassKt$books$1 extends PropertyReference1Impl {
    public static final KProperty1 INSTANCE = new ClassKt$books$1();

    books$1() {
        super(Book.class, "name", "getName()Ljava/lang/String;", 0);
    }

    @Nullable
    public Object get(@Nullable Object receiver) {
        return ((Book) receiver).getName();
    }
}

final class ClassKt$books$2 extends PropertyReference1Impl {
    public static final KProperty1 INSTANCE = new ClassKt$books$2();

    ClassKt$books$2() {
        super(Book.class, "author", "getAuthor()Ljava/lang/String;", 0);
    }

    @Nullable
    public Object get(@Nullable Object receiver) {
        return ((Book) receiver).getAuthor();
    }
}

Support

If you have any questions, please make Issues. And PR is always welcome.

We Are Hiring

Are you ready to join us? - https://careers.linecorp.com/ko/jobs/862

How to contribute

See CONTRIBUTING. If you believe you have discovered a vulnerability or have an issue related to security, please contact the maintainer directly or send us an email before sending a pull request.

License

   Copyright 2021 LINE Corporation

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

See LICENSE for more details.

Comments
  • where 메소드 리팩토링

    where 메소드 리팩토링

    안녕하세요. jdsl에 흥미를 느껴 사이드 프로젝트에 적용해보고 있습니다. where 절 관련해서 제언 사항이 있어 이슈와 pr을 올려보고자 합니다.

    제가 하려고 하는 것은 무한 스크롤인데요. 일반적인 페이징이 아닌, no offset을 위해 입력받은 id를 기준으로 일정 개수만큼 쿼링하고자합니다. (참고 하고 있는 내용: https://jojoldu.tistory.com/528)

    하지만 첫번째 페이지는 특성 상 id를 알기 어려운 것으로 알고 있습니다. 따라서 아래와 같은 코드를 작성하고 싶은데, null을 허용하지 않아 불가능합니다.

    image [그림 1 : 목표 코드]

    우선 아래 두 가지 해결 방법을 찾았습니다. 하지만 코드가 (생각보다) 복잡해졌다고 생각합니다.

    image [그림 2: 해결 방법 1 - let 구문 안에 where 절 삽입] image [그림 3 : 해결 방법 2 - PredicateSpec.empty 사용]

    lastTermId가 null일 경우, 그림 2와 그림 3의 코드 모두 where절을 만들지 않고 아래와 같은 쿼리를 만들었습니다

    select
            termentity0_.id as col_0_0_ 
        from
            tb_term termentity0_ 
        order by
            termentity0_.id desc limit ?
    

    빈 and()을 활용하는 방법도 있으나, 이 경우 where 1=1 이 포함된 쿼리가 생성되고, 이 쿼리는 매우 좋지 않은 것으로 알고 있습니다.

    라이브러리를 다음과 같이 변경하면 좀 더 편하고 간결하게 사용할 수 있지 않을까 싶습니다 image [그림 4 : where interface 리팩토링] image [그림 5 : QueryDslImpl 리팩토링] 또한 그림4와 그림 5의 코드를 통해 and()구문을 사용하지 않아도 되니, 좀 더 간결한 코드를 작성할 수 있지 않을까 합니다.

    주니어 개발자라 아직 모르는 게 많아 틀릴 수 있으니 너그러이 봐주시면 감사하겠습니다.

    enhancement good first issue 
    opened by jaeykweon 13
  • allow null input and no need to use and() at WhereDsl

    allow null input and no need to use and() at WhereDsl

    Motivation:

    https://github.com/line/kotlin-jdsl/issues/74

    Modifications:

    • allow nullable predicates in where()
    • support multi 'and conditions' with whereAnd(), whereOr()
    • add test cases of changes
    • add examples of changes

    Commit Convention Rule

    | Commit type | Description | |-------------|---------------------------------------------------------| | feat | New Feature | | fix | Fix bug | | docs | Documentation only changed | | ci | Change CI configuration | | refactor | Not a bug fix or add feature, just refactoring code | | test | Add Test case or fix wrong test case | | style | Only change the code style(ex. white-space, formatting) |

    Result:

    we can

    • use nullable predicates in where()
    • use whereAnd(), whereOr() for multi 'and conditions'
    • test the changes
    • refer examples of changes

    Closes #. (If this resolves the issue.)

    • Describe the consequences that a user will face after this PR is merged.
    enhancement good first issue 
    opened by jaeykweon 10
  • Support Subquery Exists

    Support Subquery Exists

    image Currently kotlin-jdsl does not support the CriteriaBuilder.exists method. An implementation of this method is required.

    A function like below code should be implemented in jdsl.

    think about what kind of appearance is suitable for jdsl.

    -- korean 현재 kotlin-jdsl 은 CriteriaBuilder.exists 메소드를 지원하지 않습니다. 이 메소드의 구현이 필요합니다.

    아래 코드와 같은 기능이 jdsl에 구현 되어야 합니다.

    어떤 모습이 jdsl 에 적합한지 같이 고민해보았으면 합니다.

    @shouwn @huisam @pickmoment

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
     
    CriteriaQuery<Post> query = builder.createQuery(Post.class);
    Root<Post> p = query.from(Post.class);
     
    ParameterExpression<Integer> minScore = builder.parameter(Integer.class);
    Subquery<Integer> subQuery = query.subquery(Integer.class);
    Root<PostComment> pc = subQuery.from(PostComment.class);
    subQuery
        .select(builder.literal(1))
        .where(
            builder.equal(pc.get(PostComment_.POST), p),
            builder.gt(pc.get(PostComment_.SCORE), minScore)
        );
     
    query.where(builder.exists(subQuery));
     
    List<Post> posts = entityManager.createQuery(query)
        .setParameter(minScore, 10)
        .getResultList();
    

    generated SQL

    SELECT
        p.id AS id1_0_,
        p.title AS title2_0_
    FROM post p
    WHERE EXISTS (
        SELECT 1
        FROM post_comment pc
        WHERE
            pc.post_id=p.id AND
            pc.score > ?
    )
    ORDER BY p.id
    
    enhancement 
    opened by cj848 9
  • Add ExistsSpec to enable exists not exist sql stmt

    Add ExistsSpec to enable exists not exist sql stmt

    Motivation:

    • There are not stmt for creating exists sql stmt in jdsl project

    Modifications:

    • Add ExistsSpec to enable exists/not exist sql stmt

    Commit Convention Rule

    | Commit type | Description | |-------------|---------------------------------------------------------| | feat | New Feature | | fix | Fix bug | | docs | Documentation only changed | | ci | Change CI configuration | | refactor | Not a bug fix or add feature, just refactoring code | | test | Add Test case or fix wrong test case | | style | Only change the code style(ex. white-space, formatting) | | chore | It refers to minor tasks such as library version upgrade, typo correction, etc. |

    • If you want to add some more commit type please describe it on the Pull Request

    Result:

    • User can use exists query if they want!

    Closes

    • closes #123
    opened by kihwankim 7
  • How to use 'sum' expression with 'case-when'

    How to use 'sum' expression with 'case-when'

    I tried to convert below query to Kotlin-jdsl.

    SELECT  id,
            SUM( CASE WHEN role IN ('A','B') THEN amount ELSE 0 END ) AS balance
    FROM    TEST_TABLE
    GROUP BY id
    
    return query.listQuery {
        selectMulti(
            col(TestTable::id),
            sum(case(
              `when`(col(TestTable::role).`in`("A","B")).then(col(TestTable::occurAmount)),
              `else` = literal(0L)
            )),
        )
        from(entity(TestTable::class))
        groupBy(
            col(TestTable::id),
        )
    }
    

    But it could not possible because SumSpec might not support below syntax.

      sum(case(
        `when`(col(TestTable::role).`in`("A","B")).then(col(TestTable::occurAmount)),
        `else` = literal(0L)
      )),
    

    Is there way to possible using sum expression with case-when ?

    enhancement good first issue 
    opened by nayasis 7
  • Change Strong tag to Markdown syntax in doc comment

    Change Strong tag to Markdown syntax in doc comment

    Motivation:

    I have found out there are some typo in comments. I think we can use markdown instead of correcting typo :)

    Modifications:

    • Change <strong> tags to markdown syntax in comment.
    • Remove unused import
    • lint some test code
    opened by jbl428 6
  • Implement Reactive

    Implement Reactive

    Motivation:

    We need a reactive implementation of kotlin-jdsl. Please refer to #24.

    -- korean 우리는 kotlin-jdsl의 reactive 구현이 필요합니다. #24 를 참고해주세요.

    Modifications:

    Implemented reactive-core, hibernate-reactive, data-hibernate-reactive modules.

    There were a lot of issues that had to convert Generic types internally, but I modified it to reduce them as much as possible.

    When creating ReactiveCriteriaQueryCreator from CriteriaQueryCreator, which is an implementation that creates queries, duplicated logic was found and JpaCriteriaQueryBuilder was added. It was inevitable for backwards compatibility.

    There are a lot of revisions, so rather than splitting a branch, I'll split a commit and post a PR. For other explanations, please refer to the commit log.

    After that, I will work on the document and write a PR in addition to feature/reactive and merge it into main at once after the final merge.

    For hibernate-reactive, JDK11 is the minimum specification. At build time hibernate-reactive is handled to build with jdk 11. All hibernate-reactive related modules are built and distributed with jdk11.

    -- korean reactive-core, hibernate-reactive, data-hibernate-reactive 모듈을 구현했습니다.

    내부적으로 Generic 타입을 컨버팅 해야 하는 이슈가 많았는데 그것을 최대한 줄이도록 수정했습니다.

    쿼리를 생성하는 구현체인 CriteriaQueryCreator 을 ReactiveCriteriaQueryCreator 를 만들다보니 중복된 로직이 발견되어 JpaCriteriaQueryBuilder 를 추가했습니다. 하위 호환성을 위한 불가피한 작업이었습니다.

    수정사항이 아주 많아 브랜치를 나누기보다는 commit 을 나눠서 PR 을 올립니다. 그 외의 설명은 commit 로그를 참고해주세요.

    이후에는 문서를 작업하여 feature/reactive 에 추가로 PR을 작성하여 최종 머지된 이후에 한번에 main 으로 머지하겠습니다.

    hibernate-reactive 는 JDK11 이 최소 사양으로 정해졌습니다. build 시점에 hibernate-reactive 는 jdk 11로 빌드하도록 처리됩니다. hibernate-reactive 관련 모든 모듈들은 jdk11로 빌드되고 배포 됩니다.

    Result:

    Users can create and execute queries through HibernateMutinyReactiveQueryFactory as shown below. With Spring Data, users can create and execute queries with SpringDataHibernateMutinyReactiveQueryFactory.

    -- korean 사용자는 아래와 같이 HibernateMutinyReactiveQueryFactory 를 통해 쿼리를 생성하고 실행할 수 있습니다. Spring Data 를 사용하는 경우 사용자는 SpringDataHibernateMutinyReactiveQueryFactory로 쿼리를 생성하고 실행할 수 있습니다.

    suspend fun executeSessionWithFactory() {
        val sessionFactory = Persistence.createEntityManagerFactory("persistenceUnitName")
            .unwrap(Mutiny.SessionFactory::class.java)
        val queryFactory = HibernateMutinyReactiveQueryFactory(
            sessionFactory = factory, subqueryCreator = SubqueryCreatorImpl()
        )
        val order = Order(...initialize code)
        val actual = queryFactory.withFactory { session, factory ->
            // Similarly, all operations should be non-blocking using awaitSuspend when receiving and processing a session. 
            // Never use get() or join().
            session.persist(order).awaitSuspending()
            session.flush().awaitSuspending()
    
            factory.singleQuery<Order> {
                select(entity(Order::class))
                from(entity(Order::class))
                where(col(Order::purchaserId).equal(5000))
            }
        }
    
        assertThat(actual.id).isEqualTo(order.id)
    }
    
    suspend fun singleQuery() {
        val queryFactory = HibernateMutinyReactiveQueryFactory(
            sessionFactory = factory,
            subqueryCreator = SubqueryCreatorImpl()
        )
    
        val actualOrder = queryFactory.singleQuery<Order> {
            select(entity(Order::class))
            from(entity(Order::class))
            fetch(Order::groups)
            fetch(OrderGroup::items)
            fetch(OrderGroup::address)
            where(col(Order::id).equal(order.id))
        }
    }
    
    suspend fun pageQuery() {
        val queryFactory = SpringDataHibernateMutinyReactiveQueryFactory(
            sessionFactory = sessionFactory,
            subqueryCreator = SubqueryCreatorImpl()
        )
    
        val actual = queryFactory.pageQuery<Long>(PageRequest.of(1, 2, Sort.by("id"))) {
            select(col(Order::id))
            from(entity(Order::class))
            where(col(Order::purchaserId).equal(1000))
        }
    }
    
    
    opened by cj848 6
  • Transaction doesn't work if there's a call to an additional suspend function

    Transaction doesn't work if there's a call to an additional suspend function

    				factory.transactionWithFactory { session, _ ->
    					val entity = TestEntity(title = Title("should succeed"))
    					session.persist(entity)
    						.chain(Supplier { session.flush() })
    						.replaceWith(entity)
    						.awaitSuspending()
    					delay(2000)
    				}
    

    ^ this code breaks, this means that I can't run a transaction and call external suspend function without breaking the code Is there something I'm missing? how can I do multiple things in a transaction like - get -> async big calculation -> save

    question wontfix 
    opened by ronzeidman 5
  • support nested column fetch

    support nested column fetch

    Motivation:

    • it's impossible query only the ref key without a join, if there was a associated relationship between entity classes

    Modifications:

    • Add NestedCol data class which implement ExpressionSpec and can fetch reference key.
    • you can use this stmt for implicit join(example: https://github.com/kihwankim/kotlin-jdsl/commit/96f5b76003ab349c0759612ae2aa6a501af715e1)

    Commit Convention Rule

    | Commit type | Description | |-------------|---------------------------------------------------------| | feat | New Feature | | fix | Fix bug | | docs | Documentation only changed | | ci | Change CI configuration | | refactor | Not a bug fix or add feature, just refactoring code | | test | Add Test case or fix wrong test case | | style | Only change the code style(ex. white-space, formatting) |

    Closes #79

    documentation enhancement 
    opened by kihwankim 5
  • Entity 객체 전체를 넘겨서 업데이트 하는 쉬운 방법이 있나요?

    Entity 객체 전체를 넘겨서 업데이트 하는 쉬운 방법이 있나요?

    안녕하세요! Entity 객체 전체를 넘겨서 업데이트 하는 쉬운 방법이 있나요?

    JpaRepository 에서는 아래처럼 쉽게 업데이트가 가능했습니다.

    val updated = repository.save(bus) // S save(S entity) 
    

    kotlin-jdsl 로는, 아래처럼 써야하는데요,

    fun save(bus: Bus): Bus {
           queryFactory.updateQuery<Bus> {
                where(col(Bus::id).equal(bus.id))
                setParams(col(Bus::columnA) to bus.columnA)
                setParams(col(Bus::columnB) to bus.columnB)
            }.executeUpdate()
    
            return queryFactory.singleQuery<Bus> {
                select(entity(Bus::class))
                from(entity(Bus::class))
                where(col(Bus::id).equal(bus.id))
            }
    }
    

    Bus Entity Class 에 컬럼이 추가될때마다 save 함수를 고쳐야 했습니다.

    저는

    1. Entity Object 를 넘겨서 모든 컬럼을 업데이트를 하고 싶습니다.
    2. 업데이트 된 객체를 반환 하고 싶습니다.

    위 예제 코드보다 간단한 방법이 있나요?

    (참고로 entityManager.merge 를 사용하지 않는 이유는 update 할때 where 조건을 커스터마이징하기 위함입니다)

    question 
    opened by ShindongLee 5
  • Do you support Parameterized Query?

    Do you support Parameterized Query?

    I can't find feature to build parameterized query

    ref: https://www.baeldung.com/jpa-query-parameters

    I want to reuse TypedQuery with named parameters

    Can you support this?

    wontfix 
    opened by debop 5
  • feat: Support JPA 3.0

    feat: Support JPA 3.0

    Motivation:

    We must support the JPA 3.0 specification in #27. As it is updated to Spring Boot 3, it cannot be used if it does not support the JPA 3.0 specification. Since hibernate-reactive does not currently support the JPA 3.0 specification, it has not been updated separately.

    -- korean 우리는 #27 에 있는 JPA 3.0 스펙을 지원하여야 합니다. Spring Boot 3 으로 업데이트 되면서 JPA 3.0 스펙을 지원하지 않으면 사용할 수 없게 되었습니다. hibernate-reactive 는 현재 JPA 3.0 스펙을 지원하지 않고 있기 때문에 별도 업데이트를 하지 않았습니다.

    Modifications:

    Added jakarta module used for JPA 3.0 support. There's quite a bit of code duplication, but I've decided to take it in case of future fixes in the jdsl 3.0 version. Related discussion was made at https://github.com/line/kotlin-jdsl/issues/73#issuecomment-1336065579

    We decided to set JDK 17 as the minimum required JDK specification. As spring 6 goes up, JDK 17 becomes the minimum, and for projects using kotlin, JDK 17 is not too difficult to upgrade, so we will set JDK 17 as the minimum version.

    -- korean JPA 3.0 지원에 사용되는 jakarta 모듈을 추가했습니다. 코드 중복이 상당히 많지만 향후 jdsl 3.0 버전의 수정에 대비해 감수하기로 했습니다. 관련 논의는 https://github.com/line/kotlin-jdsl/issues/73#issuecomment-1336065579 에서 이루어졌습니다.

    JDK 17을 minimum required JDK 스펙으로 정하기로 했습니다. spring 6이 올라가며 JDK 17이 minimum 이 되었고 kotlin 을 사용하는 프로젝트라면 JDK 의 업그레이드가 그리 어렵지 않기에 JDK 17 을 최소 버전으로 지정하기로 합니다.

    #Result: Users can use the kotlin-jdsl-jakarta module to use the JPA 3.0 specification and Spring Boot 3, Spring Data JPA 3, Spring 6 or later versions.

    -- korean 유저는 kotlin-jdsl-jakarta 모듈을 사용하여 JPA 3.0 스펙과 Spring Boot 3, Spring Data JPA 3, Spring 6 이상의 버전을 사용할 수 있습니다.

    Closes #. (If this resolves the issue.)

    #27

    enhancement 
    opened by cj848 1
  • Connection leak when coroutine canceled

    Connection leak when coroutine canceled

    kotlin-jdsl converts Uni to Coroutine through 'Mutiny#awaitSuspended'. Look more closely here, the awaitSuspend function implemented by suspendCancellableCoroutine and invoke UniSubscriber#cancel when coroutine canceled.

    However, hiberante-reactive MutinySessionFactoryImpl does not provide close process for cancel.

    private<S extends Mutiny.Closeable, T> Uni<T> withSession(
              Uni<S> sessionUni,
              Function<S, Uni<T>> work,
              Context.Key<S> contextKey) {
            return sessionUni.chain( session -> Uni.createFrom().voidItem()
                  .invoke( () -> context.put( contextKey, session ) )
                  .chain( () -> work.apply( session ) )
                  .eventually( () -> context.remove( contextKey ) )
                  .eventually(session::close)
            );
    }
    

    below code not be executed when Uni(withSession) is canceled and Session not closed forever.

    .eventually( () -> context.remove( contextKey ) )
    .eventually(session::close)
    

    Im not sure this hibernate-reactive session behavior is intended :( related issue in hibernate-reactive issue

    To use current version(1.1.9.Final) hibernate-reactive session, Uni must be converted to coroutine using suspendCoroutine instead of suspendCancellableCoroutine.

    suspend fun <T> Uni<T>.awaitSingle() = suspendCoroutine<T> { continuation ->
        subscribe().with(
            { item -> continuation.resume(item) },
            { failure -> continuation.resumeWithException(failure) }
        )
    }
    
    opened by namjug-kim 0
  • chore(deps): update spring boot to v3 (major)

    chore(deps): update spring boot to v3 (major)

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.springframework.boot | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-starter-test (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-starter-data-jpa (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-starter-webflux (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-starter-web (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-dependencies (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-configuration-processor (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-autoconfigure (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence | | org.springframework.boot:spring-boot-starter (source) | 2.7.7 -> 3.0.1 | age | adoption | passing | confidence |


    Release Notes

    spring-projects/spring-boot

    v3.0.1

    Compare Source

    :lady_beetle: Bug Fixes
    • Fix typo in LocalDevToolsAutoConfiguration logging #​33615
    • No warning is given when <springProfile> is used in a Logback <root> block #​33610
    • Auto-configure PropagationWebGraphQlInterceptor for tracing propagation #​33542
    • WebClient instrumentation fails with IllegalArgumentException when adapting to WebClientExchangeTagsProvider #​33483
    • Reactive observation auto-configuration does not declare order for WebFilter #​33444
    • Web server fails to start due to "Resource location must not be null" when attempting to use a PKCS 11 KeyStore #​33433
    • Actuator health endpoint for neo4j throws NoSuchElementException and always returns Status.DOWN #​33428
    • Anchors in YAML configuration files throw UnsupportedOperationException #​33404
    • ZipkinRestTemplateSender is not customizable #​33399
    • AOT doesn't work with Logstash Logback Encoder #​33387
    • Maven process-aot goal fails when release version is set in Maven compiler plugin #​33382
    • DependsOnDatabaseInitializationPostProcessor re-declares bean dependencies at native image runtime #​33374
    • @SpringBootTest now throws a NullPointerException rather than a helpful IllegalStateException when @SpringBootConfiguration is not found #​33371
    • bootBuildImage always trys to create a native image due to bootJar always adding a META-INF/native-image/argfile to the jar #​33363
    :notebook_with_decorative_cover: Documentation
    • Improve gradle plugin tags documentation #​33617
    • Improve maven plugin tags documentation #​33616
    • Fix typo in tomcat accesslog checkExists doc #​33512
    • Documented Java compiler level is wrong #​33505
    • Fix typo in documentation #​33453
    • Update instead of replace environment in bootBuildImage documentation #​33424
    • Update the reference docs to document the need to declare the native-maven-plugin when using buildpacks to create a native image #​33422
    • Document that the shutdown endpoint is not intended for use when deploying a war to a servlet container #​33410
    • Reinstate GraphQL testing documentaion #​33407
    • Description of NEVER in Sanitize Sensitive Values isn't formatted correctly #​33398
    :hammer: Dependency Upgrades
    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​Artur-, @​aksh1618, @​candrews, @​cdanger, @​currenjin, @​izeye, @​jprinet, @​lishangbu, @​ohdaeho, @​peter-janssen, and @​shekharAggarwal

    v3.0.0

    See the Release notes for 3.0 for upgrade instructions and details of new features.

    :star: New Features

    • Provide a configuration property for the observation patterns of Spring Integration components #​33099

    :lady_beetle: Bug Fixes

    • io.micrometer.tracing.Tracer on the classpath breaks AOT processing for tests #​33298
    • Tracer library HTTP instrumentation is auto-configured unnecessarily #​33287
    • Auto-configuration ignores user-provided ObservationConventions #​33285
    • ScheduledBeanLazyInitializationExcludeFilter is auto-configured even when annotation-based scheduled has not been enabled #​33284
    • SpringBootContextLoader prints banner twice when using a @ContextHierarchy #​33263
    • Properties migrator causes an application to fail to start if it tries to map a property whose metadata data entry contains an invalid configuration property name #​33250
    • Wavefront MeterRegistryCustomizer is not applying application tags from application.properties #​33244
    • Actuator responses no longer format timestamps as ISO-8601 #​33236
    • Configuration property is not bound in a native image when property has get, set, and is methods #​33232
    • Configuration property binding does not deal with bridge methods #​33212
    • Contribute missing resource hints for GraphQL schema files and GraphiQL HTML page #​33208
    • Hints for ClientHttpRequestFactory should only be generated for matching methods #​33203
    • Native profile should configure execution in pluginManagement #​33184
    • Configuring management.server.port via a config tree results in a ConverterNotFoundException when the management context is refreshed #​33169
    • JBoss logging does not route directly to SLF4J when using Logback #​33155
    • Test with UseMainMethod.Always do not work with Kotlin main functions #​33114
    • Maven process-aot does not specify source and target release when compiling generated sources #​33112
    • Some Actuator beans are ineligible for post-processing #​33110
    • AOT-generated source fails to compile when Actuator is enabled on a WebFlux project #​33106
    • @ContextHierarchy should never be used with main method #​33078
    • Maven process-aot fails when compiler plugin has been configured with --enable-preview #​33012
    • Wavefront application tags differ from those used in a Spring Boot 2.x application #​32844
    • Maven goal spring-boot:build-image runs package phase twice #​26455

    :notebook_with_decorative_cover: Documentation

    • Document observation for R2DBC #​33335
    • Align Tomcat multiple connectors example with recommendation to configure SSL declaratively #​33333
    • Actuator document is misleading about k8s startup probe #​33327
    • Update documented for @Timed to reflect narrower support #​33282
    • Update reference documentation to replace mentions of tags providers and contributors with their Observation-based equivalents #​33281
    • Link to Micrometer's @Timed documentation #​33266
    • Clarify use of the spring.cache.type property with Hazelcast #​33258
    • Example git.commit.time in the Actuator API documentation is thousands of years in the future #​33256
    • Update Spring Security filter dispatcher types docs to reflect change in default value #​33252
    • Documentation for nested configuration properties in a native image uses @NestedConfigurationProperty too widely #​33239
    • Document that the jar task should not be disabled when building a native image #​33238
    • Document nesting configuration properties using records or Kotlin data classes and how and when to use @NestedConfigurationProperty #​33235
    • Links to Features describes sections that have moved elsewhere #​33214
    • Fix broken links in docs #​33209
    • Document the need for compilation with -parameters when targeting a native image #​33182
    • Remove outdated native image documentation #​33109
    • Mention @RegisterReflectionForBinding in the docs #​32903

    :hammer: Dependency Upgrades

    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​artembilan, @​dreis2211, @​hpoettker, @​izeye, @​jonatan-ivanov, @​oppegard, @​sdeleuze, @​ttddyy, @​tumit, and @​vpavic


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix(deps): update dependency org.springframework.batch:spring-batch-infrastructure to v5

    fix(deps): update dependency org.springframework.batch:spring-batch-infrastructure to v5

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.springframework.batch:spring-batch-infrastructure (source) | 4.3.7 -> 5.0.0 | age | adoption | passing | confidence |


    Release Notes

    spring-projects/spring-batch

    v5.0.0

    Please refer to the migration guide for more details about upgrade instructions.

    ⭐ Features
    • Upgrade minimum Java version to 17 #​3994
    • Add setter with a strongly typed parameter for the transaction isolation level type #​4032
    • Add getDataSource method to DefaultBatchConfigurer #​3872
    • Add Micrometer Observation API usage #​4065
    • Integrate SAP Hana as supported Spring Batch database #​1087
    • Create Maven BOM for Spring Batch modules #​1097
    • Allow Lambdas to be passed as item processors in Java DSL #​4061
    • Best to distinguish CreateTime and StartTime in StepExecution #​4049
    • Make charset configurable in JdbcExecutionContextDao #​795
    • Add FunctionalInterface annotation where appropriate #​4107
    • Add FieldExtractor implementation for Java records #​4159
    • Configure the right FieldExtractor based on the type of items in FlatFileItemWriterBuilder #​4161
    • Configure the right FieldSetMapper based on the type of items in FlatFileItemReaderBuilder #​4160
    • Change transaction manager type to JdbcTransactionManager in default batch configuration #​4126
    • Add support to customize transaction attributes #​4195
    • Add support to configure the transaction manager in SimpleJobOperator #​1078
    • Add support to configure the transaction manager in SimpleJobExplorer #​1307
    • Revisit the configuration of infrastructure beans with @EnableBatchProcessing #​3942
    • Add native-image support for AbstractJobRepositoryFactoryBean #​4144
    • Add native hints for Spring Batch #​4187
    • Use the Chunk API consistently #​3954
    • Parameter types improvement #​2122
    • Support Java 8 Dates for Job Parameters #​1035
    • Improve testability of SystemCommandTasklet #​3955
    • String array command with SystemCommandTasklet #​752
    • Add Spring Batch version in the execution context #​4215
    • Add native reflection hints for StepContext and JobContext #​4228
    • Add Micrometer counter for job launches in JobLauncher #​4226
    • Add full support for MariaDB as a separate product #​3891
    • Auto-configure SimpleJobOperator with EnableBatchProcessing and DefaultBatchConfiguration #​3941
    • Add method getJobInstance in JobExplorer/JobRepository/JobOperator #​3930
    🚀 Enhancements
    • Remove the unconditional exposure of the transaction manager as a bean #​3981
    • SQL Server Auto-generated Schema - TEXT data type deprecated: #​864
    • Deprecate support classes implementing interfaces with default methods #​3925
    • Add default methods in interfaces #​3924
    • JobParameter must not accept null values #​3913
    • FlatFileItemWriter now uses charset to determine default encoding #​3910
    • FlatFileItemReader and FlatFileItemWriter don't have the same default encoding #​1154
    • Avoid string conversion in ExecutionContextSerializer tests #​3986
    • Make ScopeConfiguration publicly accessible #​3958
    • In JOB_PARAMS table DATE_VAL column is updated incorrectly Like "1/1/1970 1:00:00.000000 AM" instead to the current date #​1577
    • Use default methods in TestExecutionListener #​3909
    • refactor: simplify boolean expression #​3945
    • Remove Reflection from StepScopeTestExecutionListener #​3908
    • Replace deprecated TransactionSynchronizationAdapter #​3874
    • Remove double brace initialization #​3868
    • Fix some raw types #​3803
    • Don't call wrapper constructors directly #​3800
    • Replace Assert.assertThat with MatcherAssert.assertThat #​3804
    • Replace #initMocks with MockitoRule #​3805
    • Refactor deprecated extractDatabaseMetaData #​3873
    • Simplify GET_LAST_STEP_EXECUTION #​3997
    • Make countStepExecutions access batch_job_execution only once #​3876
    • Adjust h2 schema to work with v2.0.x #​4043
    • Adjust H2PagingQueryProvider to work with v2.x #​4047
    • Require spring-jdbc in core module #​4048
    • Rename setJobIncrementer to setJobInstanceIncrementer in JdbcJobInstanceDao #​3929
    • Rename schema-oracle10g to schema-oracle #​1057
    • Constructors with var args/Lists #​686
    • Remove benign [WARNINGS] from batch build #​4066
    • MongoItemReader#setSort check its argument #​4014
    • Collection's empty data check using CollectionUtils.isEmpty #​4021
    • Add @Nullable to StepExecution::endTime #​4034
    • Remove SQLLite Batch database tables before starting tests #​4063
    • Add @Nullable where appropriate in JobExecution and StepExecution #​4077
    • Change default encoding to UTF-8 in JdbcExecutionContextDao #​3983
    • Add java.util.UUID to the trusted classes list in Jackson2ExecutionContextStringSerializer #​4110
    • AbstractFileItemWriter should support java.nio #​756
    • Make JUnit4 dependency optional in spring-batch-test #​4033
    • Replace deprecated IntegrationFlows #​4155
    • Rename SimpleJobLauncher to TaskExecutorJobLauncher #​4123
    • Reduce use of deprecated APIs #​4120
    • Migrate tests to JUnit Jupiter #​4166
    • Remove the dependency to JUnit in AssertFile #​4112
    • Can't wrap JobRepository in a tracing representation #​3899
    • Improve JobBuilder and StepBuilder APIs with regards to setting mandatory properties #​4192
    • Deprecate Job/Step builder factories #​4188
    • Revisit the default behaviour of job parameters conversion #​3960
    • Change DefaultExecutionContextSerializer to produce Base64 #​4122
    • Revisit the default configuration of ExecutionContextSerializer with EnableBatchProcessing #​4140
    • Update MySQL Connector/J and use new Maven coordinates #​4211
    • Improve @SpringBatchTest to autowire the job under test in JobLauncherTestUtils if it is unique #​4218
    • Improve Micrometer's meter registry customization #​4224
    • Improve Micrometer's observation registry customization #​4222
    • IllegalArgumentException thrown from afterPropertiesSet where IllegalStateException would be more appropriate #​2244
    • Open ChunkMessageChannelItemWriter for extension #​952
    • Change JobBuilerHelper#enhance parameter type to AbstractJob #​4231
    • Change StepBuilerHelper#enhance parameter type to AbstractStep #​4220
    • Sorting in JdbcJobExecutionDao.GET_RUNNING_EXECUTIONS makes no sense #​3987
    🐞 Bug fixes
    • StepExecution counts integer overflow #​3650
    • Deadlock accessing creating a job on sqlserver when multiple jobs start at once #​1448
    • Oracle Error on creating new Batch Job #​1127
    • Oracle clustered environment with cached sequences can lead to Spring Batch thinking new job already exists #​2000
    • Batch sequences generate unordered ids, which results in unordered instances returned by JobExplorer #​1422
    • DefaultBatchConfigurer warns about the lack of TransactionManager provided, yet offers no way to supply it #​763
    • No pom.xml for published artifacts for 5.0.0-SNAPSHOT #​4028
    • Map.of() cannot be deserialized #​4036
    • FixedLengthTokenizer wrong tokenization with UTF-8 extended characters #​3714
    • Inconsistent default encoding in FlatFileItemReader and FlatFileItemWriter #​1154
    • StaxEventItemWriter.unclosedHeaderCallbackElements prevents new job execution #​4044
    • Circular reference error when autowiring JobBuilderFactory #​3991
    • NPE when creating MongoItemReader using a builder without specifying sorting #​4082
    • Unable to build the project without an internet connection #​4152
    • Add missing initialized flag set to FlowJob #​4142
    • Unable to register an annotation-based StepExecutionListener in a fault-tolerant step #​4137
    • Fix tests catching nested exceptions #​4136
    • Unable to read XML data without spring-tx in the classpath #​4132
    • Maven surefire uses wrong provider for Spring Batch Core #​4121
    • Lost transactionAttribute when using chaining StepBuilder #​3686
    • ItemReadListener not being correctly registered after adding a StepExecutionListener #​773
    • Cannot subclass final class com.sun.proxy.$Proxy202 #​793
    • StepBuilderFactory Only Supports Listener Annotations, Not Listener Interfaces #​1098
    • JobRepositoryTestUtils should work against the JobRepository interface #​4070
    • The test datasource should not be autowired in JobRepositoryTestUtils #​4178
    • The job under test should not be autowired in JobLauncherTestUtils #​1237
    • RepositoryItemReader#setRepository is broken in 5.0.0-M4 #​4164
    • Fix non-nullable columns in MySQL migration for Spring Batch 4.3 #​4145
    • Incorrect transaction manager configuration in BatchConfigurer #​4191
    • Inconsistent transaction manager configuration between XML and Java config styles #​4130
    • Fix link to spring-batch.xsd in spring.schemas 05f6d13
    • Duplicated job execution for single job instance. #​3788
    • JobRepositoryTestUtils#removeJobExecutions() Fails with Foreign Key Constraint Violation if Job Executions have Step Executions #​4242
    • Calling JobExplorer outside of a transaction logs warnings about the isolation Level not being applied #​4230
    • Incorrect deprecation of ItemStreamSupport #​4238
    • Execution context deserialization failure in AOT mode on second job run #​4239
    • JobOperator#stop can not stop JobExecution correctly in some cases #​4064
    • BatchStatus#isRunning() is not consistent with JobExplorer#findRunningJobExecutions(String) or JobExecution#isRunning() #​1483
    • JobRepository#getJobNames() always returns empty list #​4229
    • SpringBatchTest does not work ootb with SpringBoot #​4233
    🔨 Tasks
    • Favour jakarta over javax components #​3656
    • Upgrade Spring dependencies to major versions #​4027
    • Deprecate support for Neo4j #​3956
    • Update maven wrapper version to 3.8.2 #​3978
    • Clean up schema versions in XML files #​913
    • Remove deprecated APIs #​3836
    • Remove usage of deprecated APIs #​3838
    • Remove SQLFire support #​3839
    • Remove JSR-352 implementation #​3894
    • Updated graceful shutdown sample by removing deprecated code #​3916
    • Replaces deprecated interfaces #​3971
    • Remove some deprecated APIs from tests #​3962
    • CI builds against various database platforms #​3092
    • OptimisticLockingFailureTests.testAsyncStopOfStartingJob fails intermittently #​1121
    • Intermittent failure in ConcurrentTransactionTests on windows #​3851
    • Intermittent failure in AsynchronousTests on windows #​3852
    • FaultTolerantExceptionClassesTests testNoRollbackTaskletRollbackException fails intermittently #​1117
    • Rename master branch to main #​3879
    • Update build process to use Maven #​3820
    • Deprecate Hibernate support #​4150
    • Deprecate AssertFile #​4181
    • Deprecate JobBuilderFactory and StepBuilderFactory support #​4188
    • Removal of BatchConfigurer and DefaultBatchConfigurer #​3942
    • Removal of SimpleBatchConfiguration and ModularBatchConfiguration #​3942
    • Remove ParameterType enumeration #​3960
    • Deprecate JobParameters#toProperties #​3960
    • Deprecate JobParametersBuilder#addParameter #​3960
    • The method JobParameter#getType now returns T instead of Object
    • Deprecate throttle limit in favour of using similar features in TaskExecutor implementations #​2218
    • Remove support for Gemfire #​4214
    • Change setter name for isolationLevelForCreate in AbstractJobRepositoryFactoryBean #​4213
    • Change return type of counting methods in various DAOs from int to long #​4227
    🔨 Dependency Upgrades
    • Upgrade to Spring Framework 6.0.1
    • Upgrade to Spring Data 2022.0.0
    • Upgrade to Spring Integration 6.0.0
    • Upgrade to Spring AMQP 3.0.0
    • Upgrade to Spring for Apache Kafka 3.0.0
    • Upgrade to Micrometer 1.10.1
    📔 Documentation
    • Editing of the job edit changes #​3918
    • Add EPUB output in documentation #​3920
    • Restore the dynamic ToC #​4019
    • Added missing docs for batch.core and batch.core.configuration packages #​4068
    • Wrong size for BATCH_JOB_INSTANCE.JOB_KEY in Appendix A #​4071
    • Fix typos in documentation #​4010
    • Fix Javadoc of FaultTolerantChunkProvider #​4029
    • Incorrect documentation in "4.6.6 Abort a job" section #​4037
    • Editing pass for Javdocs #​4096 #​4090
    • Editing pass for reference docs #​4083
    • Fix Javadoc of SpringBatchTest annotation #​4102
    • Add package-info.java to integration #​4141
    • Editing pass #​4163
    • Javadoc editing #​4158
    • Improve Javadocs #​4129
    • Update reference documentation to use the Spring Asciidoctor Backend #​3865
    • Fix minor example in job.adoc #​4199
    • Incorrect reference to SimpleJdbcTemplate in reference documentation #​4197
    • Improve documentation of scoped beans definition #​1502
    • Headline in Spring Batch 5.0 Migration Guide contains typo #​4240
    ❤️ Contributors

    We'd like to thank all contributors who helped in making this release possible!


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix(deps): update dependency org.springframework.data:spring-data-jpa to v3

    fix(deps): update dependency org.springframework.data:spring-data-jpa to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.springframework.data:spring-data-jpa (source) | 2.7.6 -> 3.0.0 | age | adoption | passing | confidence |


    Release Notes

    spring-projects/spring-data-jpa

    v3.0.0

    Compare Source

    :green_book: Links

    :lady_beetle: Bug Fixes

    • EntityManagerBeanDefinitionRegistrarPostProcessor does not ensure unique SharedEntityManagerCreator beans #​2699

    :notebook_with_decorative_cover: Documentation

    • Replace news and noteworthy with links to the release notes. #​2697

    :hammer: Dependency Upgrades

    • Bump hsqldb from 2.5.1 to 2.7.1 in /spring-data-jpa #​2694
    • Upgraded JSQLParser to version 4.5. #​2693
    • Update test dependencies. #​2677

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • fix(deps): update spring core to v6 (major)

    fix(deps): update spring core to v6 (major)

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.springframework:spring-beans | 5.3.24 -> 6.0.3 | age | adoption | passing | confidence | | org.springframework:spring-core | 5.3.24 -> 6.0.3 | age | adoption | passing | confidence |


    Release Notes

    spring-projects/spring-framework

    v6.0.3

    Compare Source

    :star: New Features

    • Throw PessimisticLockingFailureException/CannotAcquireLockException instead of plain ConcurrencyFailureException #​29675
    • Introduce additional constructors in MockClientHttpRequest and MockClientHttpResponse #​29670
    • Fall back to JdkClientHttpConnector as ClientHttpConnector #​29645
    • Optimize object creation in RequestMappingHandlerMapping#handleNoMatch #​29634
    • Align multipart codecs on client and server #​29630
    • Deprecate "application/graphql+json" media type after spec changes #​29617
    • HTTP interface client does not call FormHttpMessageWriter when writing form data #​29615
    • ProblemDetail doesn't override the equals method #​29606
    • Add title to SockJS iFrames for accessibility compliance #​29594
    • Forbid loading of a test's ApplicationContext in AOT mode if AOT processing failed #​29579
    • Deprecate JettyWebSocketClient in favor of StandardWebSocketClient #​29576
    • Improve options to expose MessageSource formatted errors for a ProblemDetail response #​29574
    • Make @ModelAttribute and @InitBinder annotations @Reflective #​29572
    • Update BindingReflectionHintsRegistrar to support properties on records #​29571

    :lady_beetle: Bug Fixes

    • Cannot use WebDAV methods in Spring MVC 6.0 anymore #​29689
    • AnnotatedElementUtils.findMergedRepeatableAnnotations does not fetch results when other attributes exist in container annotation #​29685
    • BeanWrapperImpl NPE in setWrappedInstance after invoking getPropertyValue #​29681
    • SpEL ConstructorReference does not generate AST representation of arrays #​29665
    • NullPointerException in BindingReflectionHintsRegistrar for anonymous classes #​29657
    • DataBufferInputStream violates InputStream contract #​29642
    • Component scanning no longer uses component index for @Named, @ManagedBean, and other Jakarta annotations #​29641
    • Fix canWrite in PartHttpMessageWriter #​29631
    • NoHandlerFoundException mistakenly returns request headers from ErrorResponse#getHeaders #​29626
    • URI override for @HttpExchange doesn't work if there are both URI and @PathVariable method parameters #​29624
    • Unnecessary parameter name introspection for constructor-arg resolution (leading to LocalVariableTableParameterNameDiscoverer warnings) #​29612
    • Set detail from reason in both constructors of ResponseStatusException #​29608
    • SpEL string literal misses single quotation marks in toStringAST() #​29604
    • AOT code generation fails for bean of type boolean #​29598
    • request-scoped bean with @Lazy fails in native image (due to missing detection of CGLIB lazy resolution proxies) #​29584
    • 500 error from WebFlux when parsing Content-Type leads to InvalidMediaTypeException #​29565
    • ConcurrentLruCache implementation is using too much heap memory #​29520
    • Duplicate key violation gets translated to DataIntegrityViolationException instead of DuplicateKeyException in Spring 6 #​29511
    • SpEL: Two double quotes are replaced by one double quote in single quoted String literal (and vice versa) #​28356

    :notebook_with_decorative_cover: Documentation

    • Fix ErrorResponse#type documentation #​29632
    • Fix typo in observability documentation #​29590
    • Consistent documentation references to Jakarta WebSocket (2.1) #​29581
    • Unrendered asciidoc headings in reference documentation #​29569
    • Document observability support #​29524

    :hammer: Dependency Upgrades

    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​Aashay-Chapatwala, @​CoderYellow, @​ShenFeng312, @​Spark61, @​divcon, @​izeye, @​koo-taejin, @​mdeinum, @​mhalbritter, @​quaff, and @​singhbaljit

    v6.0.2

    :star: New Features
    • Rely on standard parameter name resolution in Bean Validation 3.0 #​29566
    :lady_beetle: Bug Fixes
    • ResponseStatusException does not use the reason to set the "detail" field #​29567
    • LocalVariableTableParameterNameDiscoverer logs many warnings with Hibernate validation #​29563
    :notebook_with_decorative_cover: Documentation
    • org.springframework.web.multipart.commons not found #​29562

    v6.0.1

    :star: New Features

    • Make SourceHttpMessageConverter optional #​29535
    • Deprecate LocalVariableTableParameterNameDiscoverer completely (avoiding its exposure in native images) #​29531
    • Make GeneratorStrategy.generate unreachable on native #​29521
    • Update LogAdapter to allow build-time code removal #​29506

    :lady_beetle: Bug Fixes

    • Unhandled exceptions should mark Servlet observation outcome as error #​29512

    :notebook_with_decorative_cover: Documentation

    • Broken link in documentation section 6.10 #​29554
    • Fix Javadoc link text in BindingResult #​29551
    • Fix some typos in Kotlin WebClient example code #​29538
    • Fix link to Bean Utils Light Library in BeanUtils Javadoc #​29534
    • Fix link to WebFlux section in reference manual #​29525
    • Document RuntimeHints testing strategies #​29523
    • Reorganize and modularize the Testing chapter in the reference manual #​29522
    • Document switch to SQLExceptionSubclassTranslator in the upgrade guide #​29518
    • Update documentation to mention Java 17+ baseline #​29514
    • Link to Spring WebFlux section is broken #​29513
    • Update javadoc of Jackson-based decoders to reflect 2.14 baseline #​29508
    • Code example has callout from a different code example #​29505
    • Code listing callouts are displayed incorrectly in core-beans.adoc #​29457
    • Fix a syntax error in an XML listing in core-validation.adoc #​29456

    :hammer: Dependency Upgrades

    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​Encyclopedias, @​andregasser, @​davidcostanzo, @​divcon, @​jiangying000, @​mdeinum, and @​wilkinsona

    v6.0.0

    See What's New in Spring Framework 6.x and Upgrading to Spring Framework 6.x for upgrade instructions and details of new features.

    :star: New Features
    • Avoid direct URL construction and URL equality checks #​29486
    • Simplify creating RFC 7807 responses from functional endpoints #​29462
    • Allow test classes to provide runtime hints via declarative mechanisms #​29455
    :notebook_with_decorative_cover: Documentation
    • Align javadoc of DefaultParameterNameDiscoverer with its behavior #​29494
    • Document AOT support in the TestContext framework #​29482
    • Document Ahead of Time processing in the reference guide #​29350
    :hammer: Dependency Upgrades
    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​ophiuhus and @​wilkinsona


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
Releases(2.0.7.RELEASE)
  • 2.0.7.RELEASE(Nov 9, 2022)

    2.0.7 (2022-11-09)

    Bug Fixes

    none

    Internal Improvement

    none

    Features

    feat:exists spec: Add ExistsSpec to enable exists not exist sql stmt by @kihwankim in https://github.com/line/kotlin-jdsl/pull/127

    Breaking Changes

    none

    New Contributors

    Full Changelog: https://github.com/line/kotlin-jdsl/compare/2.0.6.RELEASE...2.0.7.RELEASE

    Source code(tar.gz)
    Source code(zip)
  • 2.0.6.RELEASE(Sep 27, 2022)

    2.0.6 (2022-09-27)

    Bug Fixes

    none

    Internal Improvement

    feat:gradle version catalog: Support gradle version catalog for dependency management by @jbl428 in https://github.com/line/kotlin-jdsl/pull/80

    Features

    feat:nested column: Support nested column without join by @jaeykweon in https://github.com/line/kotlin-jdsl/pull/81

    Breaking Changes

    none

    New Contributors

    • @kihwankim made their first contribution in https://github.com/line/kotlin-jdsl/pull/81

    Full Changelog: https://github.com/line/kotlin-jdsl/compare/2.0.5.RELEASE...2.0.6.RELEASE

    Source code(tar.gz)
    Source code(zip)
  • 2.0.5.RELEASE(Aug 22, 2022)

    2.0.5 (2022-08-22)

    Bug Fixes

    none

    Internal Improvement

    none

    Features

    refactor:where method: Support null in where method by @jaeykweon in https://github.com/line/kotlin-jdsl/pull/75

    Breaking Changes

    none

    New Contributors

    • @jaeykweon made their first contribution in https://github.com/line/kotlin-jdsl/pull/75

    Full Changelog: https://github.com/line/kotlin-jdsl/compare/2.0.4.RELEASE...2.0.5.RELEASE

    Source code(tar.gz)
    Source code(zip)
  • 2.0.4.RELEASE(Jul 6, 2022)

    2.0.4 (2022-07-06)

    Bug Fixes

    none

    Internal Improvement

    • docs: add explanation on left and right join by @pemassi in https://github.com/line/kotlin-jdsl/pull/62
    • dependencies up by @cj848 in https://github.com/line/kotlin-jdsl/pull/66
      • kotlin-coroutine 1.6.3,
      • h2 2.1.214
      • mutiny 1.6.0
      • spring core 5.3.21
      • boot 2.7.1(2.6.9)
    • Correct typo and Unify code style by @heli-os in https://github.com/line/kotlin-jdsl/pull/68

    Features

    core, reactive-core: Support Kotlin 1.7.0 by @cj848 in https://github.com/line/kotlin-jdsl/pull/65

    Breaking Changes

    • There is no problem in using it, but as it was upgraded to kotlin 1.7.0, the spring boot 2.3 version was officially dropped from support due to internal issues.

    New Contributors

    • @pemassi made their first contribution in https://github.com/line/kotlin-jdsl/pull/62

    Full Changelog: https://github.com/line/kotlin-jdsl/compare/2.0.3.RELEASE...2.0.4.RELEASE

    Source code(tar.gz)
    Source code(zip)
  • 2.0.3.RELEASE(May 27, 2022)

    2.0.3 (2022-05-27)

    Bug Fixes

    none

    Features

    core, reactive-core: Support Spring Boot 2.7.0 by @cj848 in https://github.com/line/kotlin-jdsl/pull/59

    Internal Improvement

    • fix publish unit test results path by @cj848 in https://github.com/line/kotlin-jdsl/pull/54
    • Change Strong tag to Markdown syntax in doc comment by @jbl428 in https://github.com/line/kotlin-jdsl/pull/53
    • Add DTO Projection section and example code by @waahhh in https://github.com/line/kotlin-jdsl/pull/55
    • Apply Commit lint on Pull Request by @huisam in https://github.com/line/kotlin-jdsl/pull/56
    • Correct typo in "CASE WHEN" section of README.md by @waahhh in https://github.com/line/kotlin-jdsl/pull/57
    • dependencies up
      • spring-core: 5.3.20
      • spring-boot: 2.7.0
      • spring-data-jpa: 2.7.0
      • hibernate: 5.6.9.Final
      • hibernate-reactive: 1.1.6.Final
      • agroal-pool: 2.0
      • vertx-jdbc-client: 4.3.1
      • spring-batch-infrastructure: 4.3.6
      • mockk: 1.12.4
      • h2: 2.1.212
      • mutiny: 1.5.0

    New Contributors

    • @jbl428 made their first contribution in https://github.com/line/kotlin-jdsl/pull/53
    • @waahhh made their first contribution in https://github.com/line/kotlin-jdsl/pull/55
    • @huisam made their first contribution in https://github.com/line/kotlin-jdsl/pull/56

    Full Changelog: https://github.com/line/kotlin-jdsl/compare/2.0.2.RELEASE...2.0.3.RELEASE

    Source code(tar.gz)
    Source code(zip)
  • 2.0.2.RELEASE(Apr 28, 2022)

    2.0.2 (2022-04-28)

    Bug Fixes

    none

    Features

    • core, reactive-core: Support Treat #52

    Internal Improvement

    Source code(tar.gz)
    Source code(zip)
  • 2.0.1.RELEASE(Mar 15, 2022)

    2.0.1 (2022-03-14)

    Bug Fixes

    none

    Features

    none

    Internal Improvement

    • core, reactive-core: Improve create object performance for QueryDslImpl & ReactiveQueryDslImpl #50
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0.RELEASE(Mar 14, 2022)

    2.0.0 (2022-03-14)

    kotlin-jdsl has been released which adopts hibernate-reactive as a detailed implementation.

    Bug Fixes

    none

    Features

    • reactive-core, hibernate-reactive, data-reactive-core, data-hibernate-reactive: Implement Reactive #47

    Internal Improvement

    • none
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0.RELEASE(Feb 14, 2022)

    1.3.0 (2022-02-14)

    Bug Fixes

    none

    Features

    • query: Expression type support for Aggregation Functions #41

    Internal Improvement

    • Abstract Test Classes does not directly access EntityManager methods #42
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0.RELEASE(Feb 11, 2022)

    1.2.0 (2022-02-11)

    Bug Fixes

    • none

    Features

    • core, query, data-core: Support Criteria Update API #36
    • core, query, data-core: Support Criteria Delete API #38

    Internal Improvement

    • Seperate Query Module #31
    • Seperate JoinDsl.associate to AssociateDsl.associate & Support Criteria API's Alias #35
    • gradle version up #37
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0.RELEASE(Jan 5, 2022)

    1.1.0 (2022-01-05)

    Bug Fixes

    • none

    Features

    • eclipselink: Support Eclipselink #16
    • examples: Make different versions Spring Boot Examples #12
    • core: Support function so that User can define each DB function new feature #19

    Internal Improvement

    • Correct typo in developer's email address. #17
    • Code coverage management is required. #21
    Source code(tar.gz)
    Source code(zip)
  • 1.0.1.RELEASE(Dec 30, 2021)

  • 1.0.0.RELEASE(Dec 30, 2021)

    The historic kotlin-jdsl's 1.0.0.RELEASE version has been released. -- korean 역사적인 kotlin-jdsl의 1.0.0.RELEASE 버전이 릴리즈 되었습니다.

    Source code(tar.gz)
    Source code(zip)
Owner
LINE
LINE
Reflex - Reflection API for Kotlin

Reflex repositories { maven { url = uri("https://repo.tabooproject.org/repos

TabooLib Project 13 Aug 21, 2022
Spring Boot built using Kotlin, H2, Postgres, Hibernate and JPA

Spring-Boot-Kotlin-Sample Spring Boot built using Kotlin, H2, Postgres, Hibernate and JPA Getting Started Reference Documentation For further referenc

Reza Nur Rochmat 0 Jan 7, 2022
This library handles conversion between Request Params and JPA Specification.

Spring Jpa Magic Filter This library handles conversion between spring rest Request Params and JPA Specification. It can be considered a simpler alter

Verissimo Joao Ribeiro 4 Jan 12, 2022
Kotlin backend based on the Clean Architecture principles. Ktor, JWT, Exposed, Flyway, KGraphQL/GraphQL generated endpoints, Gradle.

Kotlin Clean Architecture Backend Kotlin backend based on the Clean Architecture principles. The application is separated into three modules: Domain,

null 255 Jan 3, 2023
Generated with spring boot kotlin starter kit

Kotlin backend Generated with spring boot kotlin starter kit The idea is to: Get a microservice written in kotlin for managing users and roles. To be

Oriol Subirana 1 Oct 19, 2021
Browse your memories without any interruptions with this photo and video gallery

Simple Gallery Simple Gallery Pro is a highly customizable lightweight gallery loved by millions of people for its great user experience. Organize and

Simple Mobile Tools 2.8k Jan 8, 2023
Nice and simple DSL for Espresso Compose UI testing in Kotlin

Kakao Compose Nice and simple DSL for Espresso Compose in Kotlin Benefits Readability Reusability Extensible DSL How to use it Create Screen Create yo

null 74 Dec 26, 2022
Modular Android architecture which showcase Kotlin, MVVM, Navigation, Hilt, Coroutines, Jetpack compose, Retrofit, Unit test and Kotlin Gradle DSL.

SampleCompose Modular Android architecture which showcase Kotlin, MVVM, Navigation, Hilt, Coroutines, Jetpack compose, Retrofit, Unit test and Kotlin

Mohammadali Rezaei 7 Nov 28, 2022
A simple textfield for adding quick notes without ads.

Simple Notes A simple textfield for adding quick notes. Need to take a quick note of something to buy, an address, or a startup idea? Then this is the

Simple Mobile Tools 670 Dec 31, 2022
Easy app for managing your files without ads, respecting your privacy & security

Simple File Manager Can also be used for browsing root files and SD card content. You can easily rename, copy, move, delete and share anything you wis

Simple Mobile Tools 1.2k Dec 29, 2022
A Kotlin/Java library to connect directly to an Android device without an adb binary or an ADB server

dadb Blog Post: Our First Open-Source Project A Kotlin/Java library to connect directly to an Android device without an adb binary or an ADB server de

mobile.dev 791 Dec 20, 2022
Send Whatsapp Message Without Saving Mobile Number

Send Whatsapp Message Without Saving Mobile Number In this project i created the

THANGADURAI SELVARAJ 2 Apr 22, 2022
Kotlin extension function provides a facility to "add" methods to class without inheriting a class or using any type of design pattern

What is Kotlin Extension Function ? Kotlin extension function provides a facility to "add" methods to class without inheriting a class or using any ty

mohsen 21 Dec 3, 2022
A multifunctional Android RAT with GUI based Web Panel without port forwarding.

AIRAVAT A multifunctional Android RAT with GUI based Web Panel without port forwarding. Features Read all the files of Internal Storage Download Any M

The One And Only 336 Dec 27, 2022
Quickly rotate screen on Android devices without second thought

Useful uitlity for ONYX BOOX Eink devices. It provides several quick actions to be added in top system panel

Daniel Kao 21 Jan 3, 2023
An Android Image compress library, reduce's the size of the image by 90% without losing any of its pixels.

Image Compressor An Android image compress library, image compressor, is small and effective. With very little or no image quality degradation, a comp

Vinod Baste 11 Dec 23, 2022
An Android template you can use to build your project with gradle kotlin dsl

Android Gradle KTS An Android template you can use to build your project with gradle kotlin dsl Build.gradle.kts You can use your project's build.grad

Deep 17 Sep 12, 2022
Gradle plugin which allows to use typed DSL for generating kubernetes/openshift YAML files

gr8s Gradle plugin which allows using typed DSL for generating kubernetes/openshift YAML files. Based on kuberig Usage import io.github.guai.gr8s.Gene

null 0 Jan 3, 2022