2016-12-12 3 views
0

Привет, ребята, я использую тимелеар 3 с весенними ботинками и весенними данными jpa. Но вот проблема. Когда я пытаюсь сохранить я получаю эту ошибку из Hibernate:Множественный выбор в тимелеафе + спящий режим + весенний ботинок

Hibernate: insert into consulta (medico_id) values (?) 
Hibernate: insert into consulta_pacientes (consulta_id, pacientes_id) values (?, ?) 
2016-12-12 16:06:53.963 WARN 11912 --- [nio-9393-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1364, SQLState: HY000 
2016-12-12 16:06:53.963 ERROR 11912 --- [nio-9393-exec-9] o.h.engine.jdbc.spi.SqlExceptionHelper : Field 'pct_id' doesn't have a default value 
2016-12-12 16:06:53.965 INFO 11912 --- [nio-9393-exec-9] o.h.e.j.b.internal.AbstractBatchImpl  : HHH000010: On release of batch it still contained JDBC statements 
2016-12-12 16:06:53.976 ERROR 11912 --- [nio-9393-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path 
[] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibe 
rnate.exception.GenericJDBCException: could not execute statement] with root cause 

java.sql.SQLException: Field 'pct_id' doesn't have a default value 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) ~[mysql-connector-java-5.1.39.jar:5.1.39] 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966) ~[mysql-connector-java-5.1.39.jar:5.1.39] 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902) ~[mysql-connector-java-5.1.39.jar:5.1.39] 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526) ~[mysql-connector-java-5.1.39.jar:5.1.39] 

Я уже пытался использовать конвертер, но не тренировки должным образом. Пытался заглянуть в это сообщение * ... но и не решил.

* 1 http://forum.thymeleaf.org/th-selected-not-working-on-lt-select-gt-lt-option-gt-td4029201.html

* 2 thymeleaf multiple selected on edit

Любые советы? Прямо сейчас я теряюсь.

cadastro.html

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
... 
    <form action="#" th:action="@{salvar}" th:object="${consulta}" method="POST"> 
    <div class="form-inline"> 
    <label for="select-medico-consulta" class="form-group">Medico</label> 
     <select th:field="*{medico.id}" id="select-medico-consulta" > 
      <div> 
      <option th:each="medicoEntry : ${medicos}" 
        th:value="${medicoEntry.id}" 
         th:text="${medicoEntry.nome}"></option> 
      </div>   
     </select> 

     <div class="form-group"> 
     <label id="paciente-label" for="select-paciente" > Paciente</label> 
     <select th:field="*{pacientes}" id="select-paciente" size="5" multiple="multiple" > 
      <div> 
      <option th:each="pacienteEntry : ${listaPacientes}" 
         th:field="*{pacientes}" 
         th:value="${pacienteEntry.id}" 
         th:text="${pacienteEntry.nome}"></option> 
      </div>   
     </select> 
     </div>      
     </div> 

    <div class="form-group"> 
    <label for="comment">Consulta</label> 
    <textarea class="form-control" rows="5" id="comment"></textarea> 
    </div> 


    <button type="submit" class="btn btn-default">Salvar</button> 
</form> 
</div>  

... 

consultaController.java

package 
and imports... 

@Controller 
@RequestMapping("/medclin") 
public class ConsultaController { 

    @Autowired 
    private ConsultaDao consultadao; 

    @Autowired 
    private MedicoDao medicoDao; 

    @Autowired 
    private PacienteDao pacienteDao; 



    @RequestMapping("/consulta") 
    public ModelAndView Consulta() { 

     ModelAndView modelAndView = new ModelAndView("consulta/consulta"); 

     ArrayList<Medico> medicos = (ArrayList<Medico>) medicoDao.findAll(); 

     ArrayList<Paciente> pacientes = (ArrayList<Paciente>) pacienteDao.findAll(); 

     modelAndView.addObject("medicos", medicos); 
     modelAndView.addObject("listaPacientes", pacientes); 


     modelAndView.addObject("consulta", new Consulta()); 


     return modelAndView; 
    } 



    @RequestMapping(value = "/salvar", method = RequestMethod.POST) 
    public String salvar(@ModelAttribute Consulta consulta) { 


     consultadao.save(consulta); 

     return "redirect:medclin/home"; 
    } 

} 

consultaDao.java

package br.com.medclin.boot.daos; 

import java.io.Serializable; 

import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 

import br.com.medclin.boot.models.Consulta; 

@Repository 
public interface ConsultaDao extends CrudRepository<Consulta , Integer> 
{ 

} 

EDIT: , как задал @bphilipnyc

Па ciente.java

@Entity 
public class Paciente { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    private String nome; 
    private Calendar dataNascimento; 
    private String endereco; 

    @NotNull 
    private String cpf; 

    @ManyToOne 
    private Plano planoDeSaude; 

    public Paciente(String nome, Calendar dataNascimento, String endereco, String cpf, Plano plano) { 
     super(); 
     this.nome = nome; 
     this.dataNascimento = dataNascimento; 
     this.endereco = endereco; 
     this.cpf = cpf; 
     this.planoDeSaude = plano; 
    } 

    public Paciente(String nome, Calendar dataNascimento, String endereco, String cpf) { 
     super(); 
     this.nome = nome; 
     this.dataNascimento = dataNascimento; 
     this.endereco = endereco; 
     this.cpf = cpf; 
    } 

    public Paciente(String pctCpf) { 
     this.cpf = pctCpf; 
    } 

    public Paciente() { 

    } 

    public String getNome() { 
     return nome; 
    } 

    public void setNome(String nome) { 
     this.nome = nome; 
    } 

    public Calendar getDataNascimento() { 
     return this.dataNascimento; 
    } 

    public void setDataNascimento(Calendar dataNascimento) { 
     this.dataNascimento = dataNascimento; 
    } 

    public String getEndereco() { 
     return this.endereco; 
    } 

    public void setEndereco(String endereco) { 
     this.endereco = endereco; 
    } 

    public String getCpf() { 
     return this.cpf; 
    } 

    public void setCpf(String cpf) { 
     this.cpf = cpf; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public Plano getPlanoDeSaude() { 
     return planoDeSaude; 
    } 

    public void setPlanoDeSaude(Plano planoDeSaude) { 
     this.planoDeSaude = planoDeSaude; 
    } 

    public boolean equals(Paciente pct) { 
     if (this.id == pct.id) 
      return true; 
     else 
      return false; 
    } 

    @Override 
    public int hashCode() { 

     return super.hashCode(); 
    } 

    @Override 
    public String toString() { 
     return "Paciente [id=" + id + ", nome=" + nome + ", dataNascimento=" + dataNascimento + ", endereco=" + endereco 
       + ", cpf=" + cpf + ", planoDeSaude=" + planoDeSaude + "]"; 
    } 


} 
+0

Можете ли вы разместить код для 'pct_id'? Я предполагаю, что это свойство некоторого класса. Для этого может быть несколько причин, но два, о которых я думаю, - это 1) неправильное сохранение компонента, чтобы он не генерировал правильный идентификатор или 2) неверный getter/setter – bphilipnyc

+0

уверен ... i'll отредактируйте исходное сообщение. – tecnocrata

+0

Также посмотрите на SO: http://stackoverflow.com/questions/25865104/field-id-doesnt-have-a-default-value – bphilipnyc

ответ

0

Проблема была решена. Кажется, что если вы измените отображение hibernate, вы должны воссоздать базу данных. Я сделал это, и проблема была решена.

Смежные вопросы