java.lang.StackOverflowError: null

0 respostas
jpajavaspring
Alandamatta

Bom dia, senhores.
Estou com um problema aqui que não sei como resolver, procurei bastante e sei o que lança esse erro, mas não sei onde ele acontece. (Esse erro é lançado quando a um método é recursivo “inifinitamente”, pelo que entendi em resumo). Alguém poderia me dar uma luz?
É o seguinte, eu tenho uma entidade chamada produto:


//...outros get/set
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="coresDoProduto", joinColumns= @JoinColumn(name="produto_id"),
    inverseJoinColumns= @JoinColumn(name="cor_id"))
    @NotEmpty(message="É necessário ao menos uma cor")
    private Set<Cor> cores;


@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="caracteristicasDoProduto", 
	joinColumns= @JoinColumn(name="produto_id"),
	inverseJoinColumns= @JoinColumn(name="caracteristica_id"))
@NotEmpty(message="É necessário ao menos uma característica")
private Set<Caracteristica> caracteristicas;


@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="categoriasDoProduto", 
	joinColumns= @JoinColumn(name="produto_id"),
	inverseJoinColumns= @JoinColumn(name="categoria_id"))
@NotEmpty(message="É necessário ao menos uma categoria")
private Set<Categoria> categorias;


//outros get/set

O que é acontece é:

  1. Se eu preencher todos essas listas e todos os outros campos da view, o objeto é persistido sem problemas.
  2. Se eu preencher todas essas lista com exceção de uma e todos os outros campos da view, o java.lang.StackOverflowError: null é lançado

Obs*: Estou usando o thymeleaf na view.
Segue código da view:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
	layout:decorator="Zlayout/layout-padrao">
<head>
<title>Produto | Appdate</title>
<meta charset="UTF-8"></meta>
</head>
<section layout:fragment="conteudo">
	<form method="post" action="/produto/salvar" enctype="multipart/form-data" th:object="${produto}">
	
	
		<div class="row col-sm-12">
			<div th:if="${#fields.hasErrors('*')}" class="form-group alert alert-danger">
				<div th:each="err : ${#fields.errors('*')}">
					<span th:text="${err}"></span>
				</div>
			</div>
		</div>
	
	
		<div class="row col-sm-12">
			<div class="form-group col-sm-12 col-md-12 col-lg-12">
				<label class="checkbox-inline label-control"> <input id="status"
					type="checkbox" checked="checked" name="situacao"></input>Ativo*
				</label>
			</div>
		</div>
		
		
		<div class="row col-sm-12">
		
			<div class="form-group col-sm-12 col-md-8 col-lg-6" 
				th:classappend="${#fields.hasErrors('nome')} ? has-error" >
				<label for="nome" class="control-label">Nome do Produto*</label> <input id="nome" type="text"
					class="form-control" th:field="*{nome}"></input>
			</div>
			
			<div class="form-group col-sm-12 col-md-4 col-lg-4"
				th:classappend="${#fields.hasErrors('codigo')} ? has-error">
				<label for="codigo" class="control-label">Código do Produto*</label> <input id="codigo"
					type="text" class="form-control" th:field="*{codigo}"></input>
			</div>
			
			<div class="form-group col-sm-12 col-md-2 col-lg-2"
				th:classappend="${#fields.hasErrors('volumes')} ? has-error">
				<label for="volumes" class="control-label">Volumes*</label> <input id="volumes"
					type="text" class="form-control" th:field="*{volumes}"></input>
			</div>
			
		</div>
		
		
		<div class="row col-sm-12">
			<div class="form-group col-sm-12 col-md-3 col-lg-3"
				th:classappend="${#fields.hasErrors('altura')} ? has-error">
				<label for="altura" class="control-label">Altura*</label> <input id="altura"
					type="text" class="form-control" th:field="*{altura}"></input>
			</div>
			
			<div class="form-group col-sm-12 col-md-3 col-lg-3"
				th:classappend="${#fields.hasErrors('largura')} ? has-error">
				<label for="largura" class="control-label">Largura*</label> <input id="largura"
					type="text" class="form-control" th:field="*{largura}"></input>
			</div>
			
			<div class="form-group col-sm-12 col-md-3 col-lg-3"
				th:classappend="${#fields.hasErrors('profundidade')} ? has-error">
				<label for="profundidade" class="control-label">Profundidade*</label> <input id="profundidade"
					type="text" class="form-control" th:field="*{profundidade}"></input>
			</div>
			
			<div class="form-group col-sm-12 col-md-3 col-lg-3"
				th:classappend="${#fields.hasErrors('peso')} ? has-error">
				<label for="peso" class="control-label">Peso*</label> <input id="peso"
					type="text" class="form-control" th:field="*{peso}"></input>
			</div>
		</div>
		
		
		<div class="row col-sm-12">
			<div class="form-group col-sm-12 col-md-6 col-lg-6">
				<label for="caracteristicas" class="control-label">Características*</label>
				<select id="caracteristicas" class="form-control" 
					th:field="*{caracteristicas}" multiple="multiple">
					<option th:each="caracteristica : ${caracteristicas}" th:text="${caracteristica.nome}" th:value="${caracteristica.id}">
 					</option>
				</select>
			</div>
			
			<div class="form-group col-sm-12 col-md-6 col-lg-6">
				<label for="cores" class="control-label">Cores*</label>
				<select id="cores" class="form-control" th:field="*{cores}" multiple="multiple">
					<option th:each="cor : ${cores}" th:text="${cor.nome}" th:value="${cor.id}">
 					</option>
				</select>
			</div>
		</div>
		
		<div class="row col-sm-12">
			<div class="form-group col-sm-12 col-md-6 col-lg-6">
				<label for="categorias" class="control-label">Categorias*</label>
				<select id="categorias" class="form-control" th:field="*{categorias}" multiple="multiple">
					<option th:each="categoria : ${categorias}" 
						th:text="${categoria.nome}" th:value="${categoria.id}">
 					</option>
				</select>
			</div>	
			<div class="form-group col-sm-12 col-md-6 col-lg-6">
				<div class="form-group col-sm-12 col-md-12 col-lg-12">
					<label for="fotoPrincipal" class="control-label">Imagem principal*</label>
					<input type="file" id="fotoPrincipal" name="arquivo"></input>
					<p class="help-block">Insira a imagem (Mín.598x453) que ficará na lista de todos os produtos.</p>
				</div>
				<div class="form-group col-sm-12 col-md-12 col-lg-12">
					<button type="button" class="btn btn-default">Ver Foto</button>
				</div>
			</div>				
		</div>
		
		<div class="row col-sm-12">
			<div class="form-group col-sm-12 col-md-12 col-lg-12">
				<label for="fotos">Imagens do produto*</label>
				<input type="file" id="fotos" name="arquivos" multiple="multiple" class="file" 
					data-show-upload="false" data-show-remove="false" data-show-caption="true" accept="image"></input>
				<p class="help-block">Insira as imagens (Mín.598x453) que ficarão no carrossel de imagem do produto.</p>
			</div>
		</div>
		
		<div class="row col-sm-12">
			<div class="col-sm-12 col-md-4 col-lg-4">
				<button id="salvar" type="submit" class="btn btn-success">Salvar</button>
			</div>
		</div>		
	</form>
	
	<script src="/js/cm-js.js"></script>
	<div layout:include="Zlayout/loading-padrao">
	</div>
	
	<script type="text/javascript">
	    $(document).ready(function() {
	        $('#cores').multiselect();
	    });
	</script>
	
</section>
</html>

Desde já agradeço!

Criado 17 de fevereiro de 2017
Respostas 0
Participantes 1