GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Erro ao adicionar alunos em uma turma 'The given id must not be null!'

Tags: #<Tag:0x00007f9ab0276328> #<Tag:0x00007f9ab0276198> #<Tag:0x00007f9ab0275fe0>

Quando clico em Incluir aluno aparece esse erro mas não entendo porque, alguém pra me dá um luz, obrigada.

Erro no console

java.lang.IllegalArgumentException: The given id must not be null! at
org.springframework.util.Assert.notNull(Assert.java:198)
~[spring-core-5.2.5.RELEASE.jar:5.2.5.RELEASE] at
org.springframework.data.jpa.repository.support.SimpleJpaRepository.findById(SimpleJpaRepository.java:269)
~[spring-data-jpa-2.2.6.RELEASE.jar:2.2.6.RELEASE] at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[na:1.8.0_231] at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
~[na:1.8.0_231] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
~[na:1.8.0_231] at java.lang.reflect.Method.invoke(Unknown Source)
~[na:1.8.0_231]

Entidade Aluno

  @Entity
    public class Aluno {
    	
    	@Id
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private Long codigo;
    	
    	@NotNull(message = "*O campo Nome é de preenchimento obrigatório")
    	private String nome;
    	
    	private String apelido;

    @ManyToMany
	@JoinTable(
	        name="AlunosTurmas", 
	        uniqueConstraints = @UniqueConstraint(columnNames = { "codigo_turma", "codigo_aluno" }),
	        joinColumns        = @JoinColumn(name = "codigo_aluno"), 
	        inverseJoinColumns = @JoinColumn(name = "codigo_turma")
	)
	private List<Turma> turmas; 
*....Getters and Setters*

Entidade Turma

@Entity
public class Turma {
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long codigo;
	
	@NotEmpty(message = "*O campo Nome é de preenchimento obrigatório")
	@NotBlank(message = "*O campo Nome é de preenchimento obrigatório")
	private String nome;
	
	private String hora_inicio;
	
	private String hora_fim;
	
	private int vagas;
	
	private String professor;
	
	@ManyToMany
    @JoinTable(
        name="AlunosTurmas", //nome da nova tabela
        uniqueConstraints  = @UniqueConstraint(columnNames = { "codigo_turma", "id_aluno" }), //id curso e turma são únicos 
        joinColumns        = @JoinColumn(name = "codigo_turma" ), //chave estrangeira de turma
        inverseJoinColumns = @JoinColumn(name = "id_aluno")       //chave estrangeira de aluno
    )
    private List<Aluno> alunos;

Controler Turmas

@Controller
@RequestMapping("/turmas")
public class TurmaController {

 @PostMapping("/associarAlunoTurma")
	    public String associarAluno(@ModelAttribute Aluno aluno, @RequestParam Long codigoTurma) {
	       
		 Turma turma = turmasRepository.getOne(codigoTurma);
			aluno = alunosRepository.getOne(aluno.getCodigo());  

	        turma.getAlunos().add(aluno);
	        turmaService.salvarAlunoTurma(turma);

	        return "redirect:/turmas/detalhesTurma/" + codigoTurma;
	    }

	 
	    @GetMapping("/detalhesTurma/{codigo}")//aqui passa o próprio cód da turma na requisição 
	    public ModelAndView getAlunoDetalhes(@PathVariable(name = "codigo") Long codigo) {

	    	Turma turma = turmasRepository.getOne(codigo);
	    	
	        ModelAndView mv = new ModelAndView("/turma/detalhesTurma");
	        mv.addObject("turma", turma);
	        List <Aluno> alunosNaoAssociados = alunosRepository.findAll();
	        alunosNaoAssociados.removeAll(turma.getAlunos());
	        mv.addObject("alunos", alunosNaoAssociados);

	        return mv;
	    }

destalhesTurma.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{/LayoutPadrao}">

<head>
<meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
    
<title>Agrestina</title>


</head>
 <body >
<section layout:fragment="content">
    	
	 <!-- partial -->
  <div class="content-wrapper" style="margin-top: -70px;">
    <div class="page-header">
       <h3 class="page-title"> Cadastro de Turmas </h3>
         <nav aria-label="breadcrumb">
           <ol class="breadcrumb">
             <li class="breadcrumb-item"><a href="/turmas">Listar</a></li>
             <li class="breadcrumb-item active" aria-current="page">Cadastrar Turma</li>
           </ol>
         </nav>
   </div>
            
     <form class="forms-sample" th:action="@{/turmas/associarAlunoTurma(codigoTurma=${turma.codigo})}" method="post">
      
              <div class="col-12 grid-margin stretch-card">
                <div class="card">
                  <div class="card-body"> 
                   <div class="row">
	                  	<div class="form-group col-md-10">
	                        <label for="exampleSelectGender">Selecione o aluno para incluir na turma</label>
	                        <select class="form-control" id="exampleSelectGender" th:field="*{alunos}">
	                          <option value="" selected="selected">- Selecione -</option>
	                          <option th:each="aluno : ${alunos}" th:value="${aluno.codigo}" 
	                          		  th:text="${aluno.nome}">Female</option>
	                        </select>
	                    </div>
                    
		              <input type="submit" class="btn btn-primary"/>
<!-- 						<i class="mdi mdi-content-save btn-icon-prepend"></i>   Incluir  </button>  -->
					
					</div>		
                 </div>
                </div>
              </div>
       </form>  
       
       
<!--        TABELA DE ALUNOS DA TURMA  -->
       
          <div class="card">
            <div class="card-body">
            <h4 class="card-title text-success">Turma: #<span th:utext="${turma.codigo}"></span> <span th:utext="${turma.nome}"></span> </h4>
                   <table class="table table-responsive table-sm">
                      <thead>
                        <tr>
                          <th class="text-dark font-weight-bold"> # </th>
                          <th class="text-dark font-weight-bold"> Nome </th>
                          <th class="text-dark font-weight-bold"> Apelido </th>
                        </tr>
                      </thead>
                   	  <tbody>
                        <tr th:each="aluno : ${turma.alunos}">
                            <td th:text="${aluno.codigo}">1</td>
                            <td th:text="${aluno.nome}"></td>
                            <td th:text="${aluno.apelido}"></td>                      
                            <td class="left">  
<!--                                 <a class="btn btn-danger btn-sm" title="Excluir"  -->
<!--                                     th:href="@{turmas/excluirTurma/{codigo}(codigo=${turma.codigo})}"> -->
<!--                                    <i class=" mdi mdi-delete"></i> -->
<!--                                 </a> -->
                            </td>
                         </tr>
                         <tr>
<!--                             <td colspan="36" th:if="${#lists.isEmpty(turma.alunos)}">Nenhum aluno foi encontrado na turma</td> -->
                         </tr>
                      </tbody>
                    </table>
                  </div>
               </div>   
       
       </div>
    </section>
    
 <script type="text/javascript" th:src="@{/js/jquery-3.3.0.min.js}"></script>
  <script type="text/javascript" th:src="@{/js/jquery.autocomplete.js}"></script>
 </body>       
</html>

Tá falando q o id não pode ser null, no banco de dados vc colocou como NOT NULL , e provavelmente esqueceu de fazer sua coluna ID ser auto increment.

Olhe no banco de dados e tanto aluno quanto turma estão auto increment.

blz, entao passa o valor do id, pq ele ta nulo

//