Как исправить проблему: "Unable to resolve column", если в скрипте часть полей указана верно?

У меня есть следующий скрипт:

/*==============================================================*/
/* Table: Employees                                             */
/*==============================================================*/
insert into Employees (firstName, lastName, phoneNumber, email, salary, role, password, username)
values ('Christiano', 'Ronaldo', '+421905123456', '[email protected]', 50000.00, 'TEAM_LEADER', 'testPassword', 'C7'),
       ('John', 'Smith', '+421905123480', '[email protected]', 40000.00, 'PM', 'testPassword2', 'Jo'),
       ('Michael', 'Jackson', '+421905123400', '[email protected]', 30000.00, 'DEVELOPER', 'testPassword3', 'Mike'),
       ('Leonardo', 'DiCaprio', '+421905123450', '[email protected]', 20000.00, 'SCIENTIST', 'testPassword4', 'Leo'),
       ('Brad', 'Pitt', '+421905123455', '[email protected]', 10000.00, 'ENGINEER', 'testPassword5', 'Brad');

Есть сущность:

import com.test.application.data.enums.Role;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.util.Collection;
import java.util.List;

/**
 * @author invzbl3 on 12/16/2022
 * @project RestApiApplication
 */
@Data
@ToString
@EqualsAndHashCode
@Entity(name = "employee_entity")
@Table(name = "employees")
public class Employee implements UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String firstName;
    private String lastName;
    private String phoneNumber;
    private String email;
    private double salary;
    @Enumerated(EnumType.STRING)
    private Role role;
    private String password;
    private String username;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(() -> "USER");
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

Я проверил аналогичный вопрос, но для меня он не выглядит таким же, потому что у меня там правильно отмечена часть полей.

В связи с этим у меня вопрос:

как я могу исправить данную проблему?

Если нужна любая дополнительная информация готов предоставить.

Заранее благодарю за любые идеи по данному вопросу.


Ответы (1 шт):

Автор решения: invzbl3

Проблема была связана с Spring Data конвенцией, работающей по умолчанию.

Добавил аннотации @JsonProperty над сущностью, чтобы не было проблем соответствия со скриптом:

@Data
@ToString
@EqualsAndHashCode
@Entity(name = "employee_entity")
@Table(name = "employees")
public class Employee implements UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @JsonProperty("first_name")
    private String firstName;

    @JsonProperty("last_name")
    private String lastName;

    @JsonProperty("phone_number")
    private String phoneNumber;
    private String email;
    private double salary;
    @Enumerated(EnumType.STRING)
    private Role role;
    private String password;
    private String username;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(() -> "USER");
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}
→ Ссылка