Как мы можем сохранить данные формы из файла JSP в базе данных с помощью весенней загрузки? - PullRequest
2 голосов
/ 19 сентября 2019

Я создаю весенний загрузочный API, который в основном просит пользователя создать учетную запись.Данные счета показаны в форме.Я хочу извлечь детали из формы и сохранить их в базе данных (MYSQL).

Класс модели выглядит следующим образом:

@Table(name = "user")
public class User {

    @Id
    @Column(name = "ID")
    private int ID;

    @Column(name = "Fname")
    private String fName;

    @Column(name = "Lname")
    private String lName;

    @Column(name = "dob")
    private String dob;

    @Column(name = "email")
    private String email;

    @Column(name = "pWord")
    private String pWord;
}

Класс контроллера выглядит следующим образом:

public class MController {

    @Autowired
    private UserRepository userRepository;

    @PostMapping("/successSignUp")
    public String dataToDB(@ModelAttribute("User") User formData, Model model) {

        userRepository.save(new User(formData.getFname(), formData.getLname(), formData.getDob(), formData.getEmail(), formData.getPassword()));    
        model.addAttribute("user", new User());
        return "welcomeUser";
    }

Когда я выполняю этот код, я получаю следующую ошибку:

java.sql.SQLSyntaxErrorException: Unknown column 'p_word' in 'field list'

Что я здесь не так делаю?Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

Spring Framework внутренне изменяет случай верблюда на случай змеи.

Это является частью стратегии именования Spring Boot: мы можем переопределить эти значения, но по умолчанию они будут:

  1. Изменить случай верблюда на случай змеи
  2. Заменить точки подчеркиванием
  3. Имена таблиц в нижнем регистре

Можете ли вы попробовать обновить имя столбца как pword вместо pWord?

@Column(name = "pword")
private String pWord;

будет считаться p_word, если вы используете 'pWord'.измените имя столбца как pword и попробуйте.

пример:

@Entity
public class Account {
    @Id
    private Long id;
    private String defaultEmail;
}
And then turn on some SQL debugging in our properties file:


hibernate.show_sql: true
At startup, we'll see the following create statement in our logs:


Hibernate: create table account (id bigint not null, default_email varchar(255))
0 голосов
/ 19 сентября 2019

Самое простое решение, чтобы исправить это, это поместить имена столбцов в нижний или верхний регистр.

@Column(name = "pword")
private String pWord;

или

@Column(name = "PWORD")
private String pWord;

Это позволит избежать того, что spring преобразует имя в snakecase.

Имена столбцов в MySql не чувствительны к регистру, поэтому оно будетработа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...