Skip to content

JdbcTemplateObjectArrayArgToVarArgs does not change deprecated query() method when implementing custom RowMapper with Entity class #753

@vijay-chavakula

Description

@vijay-chavakula

What version of OpenRewrite are you using?

  • rewrite-spring v6.8.0
  • Maven/Gradle plugin v3.13.0
  • rewrite-recipe-bom_ v3.1.0

How are you running OpenRewrite?

I am using the Maven plugin, and my project is a single module project.

<plugin>
  <groupId>org.openrewrite.maven</groupId>
  <artifactId>rewrite-maven-plugin</artifactId>
  <version>6.0.5</version>
  <configuration>
    ... 
  </configuration>
</plugin>

What is the smallest, simplest way to reproduce the problem?

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;

@Slf4j
@Repository
@RequiredArgsConstructor
public class StudentDao {

    private final JdbcTemplate jdbcTemplate;
    public static final String  FETCH_STUDENT_ID = "SELECT * FROM student WHERE STUDENT_ID = ? ";

    public List<StudentEntity> fetchProcessStats(UUID uuid) {
        return jdbcTemplate.query(
                FETCH_STUDENT_ID,
                new Object[]{uuid},
                new StudentEntityRowMapper()
        );
    }

    public static class StudentEntityRowMapper implements RowMapper<StudentEntity> {
        @Override
        public StudentEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
            StudentEntity student = new StudentEntity();
            student.setStudentId(rs.getObject("STUDENT_ID", UUID.class));
            student.setStudentName(rs.getString("STUDENT_NAME"));
            student.setStudentAge(rs.getInt("STUDENT_AGE"));
            return student;
        }
    }

    @Entity
    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @Builder
    @Table(name = "student")
    static class StudentEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "STUDENT_ID", nullable = false, updatable = false)
        private UUID studentId;

        @Column(name = "STUDENT_NAME", nullable = false)
        private String studentName;

        @Column(name = "STUDENT_AGE", nullable = false)
        private Integer studentAge;
    }
}

What did you expect to see?

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;

@Slf4j
@Repository
@RequiredArgsConstructor
public class StudentDao {

    private final JdbcTemplate jdbcTemplate;
    public static final String  FETCH_STUDENT_ID = "SELECT * FROM student WHERE STUDENT_ID = ? ";

    public List<StudentEntity> fetchProcessStats(UUID uuid) {
        return jdbcTemplate.query(
                FETCH_STUDENT_ID,
                new StudentEntityRowMapper(),
               new Object[]{uuid}
        );
    }

    public static class StudentEntityRowMapper implements RowMapper<StudentEntity> {
        @Override
        public StudentEntity mapRow(ResultSet rs, int rowNum) throws SQLException {
            StudentEntity student = new StudentEntity();
            student.setStudentId(rs.getObject("STUDENT_ID", UUID.class));
            student.setStudentName(rs.getString("STUDENT_NAME"));
            student.setStudentAge(rs.getInt("STUDENT_AGE"));
            return student;
        }
    }

    @Entity
    @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    @Builder
    @Table(name = "student")
    static class StudentEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "STUDENT_ID", nullable = false, updatable = false)
        private UUID studentId;

        @Column(name = "STUDENT_NAME", nullable = false)
        private String studentName;

        @Column(name = "STUDENT_AGE", nullable = false)
        private Integer studentAge;
    }
}

What did you see instead?

no changes made by org.openrewrite.java.spring.framework.JdbcTemplateObjectArrayArgToVarArgs

Are you interested in contributing a fix to OpenRewrite?

No

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions