Skip to content

Incorrect implementation of "ID" in SQL queries #3173

Closed
@olech2412

Description

@olech2412

We have the following behavior.

There is a class that is structured like this:

@Entity
@Table(name = "my_entity")
public class MyEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long pk;

    private Long id;
    private String name;

    public MyEntity() {
    }
}

The corresponding repository looks like this and contains a function "existsById":

@Repository
public interface MyEntityRepository extends CrudRepository<MyEntity, Long> {

    boolean existsById(Long id);

    boolean existsByIdAndName(Long id, String name);
}

Suppose the database contains the following data record:

pk🔑 id name
1 204 Name1
2 2830 Name2
3 52235 Name3

In our case the following behavior occurred:

existsById(204L) -> false

existsById(2L) -> true

existsByIdAndName(204L, "Name1") -> true

The behavior that was expected was:

The identifier Id in the function name "existsById" refers exclusively to the attribute of the class and is not internally reserved for the primary key. Accordingly, every query should only target this attribute without exception.

SpringBoot-Starter-Data-JPA-Version: 3.3.3

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions