Galera, blz? Estou apanhando num problema aqui… estou tentando fazer a listagem do ID de uma coluna que é alimentada por uma fk de outra tabela, estou usando a query:
O problema que acontece é que a lista manda o caminho do endereço de memória ao inves do ints que estão na coluna categoria_id. ( Na verdade eu queria que mostrasse o nome da categoria da tabela categoria mas me contento so com o id rs)
Abaixo estão o print do banco e da lista no JSP
Query MovimentacaoDAO
> public List listar() {
> return manager.createQuery(“select m from Movimentacao m”, Movimentacao.class).getResultList();
> }
MovimentacaoController
@RequestMapping(method=RequestMethod.GET)
public ModelAndView listar(){
ModelAndView mv = new ModelAndView("financas/lista");
List<Movimentacao> listaMovimentacoes = daoMov.listar();
mv.addObject("listaMovimentacoes", listaMovimentacoes);
return mv;
}
CategoriaController
@Controller
@Transactional //add pelo livro
@RequestMapping("/categorias")
@ControllerAdvice
public class CategoriaController {
@Autowired
private CategoriaDAO daoCat;
@Autowired
private MovimentacaoDAO dao;
@RequestMapping("/form")
public ModelAndView form(Categoria categoria) {
ModelAndView mv = new ModelAndView("categorias/form");
return mv;
}
@RequestMapping(method=RequestMethod.POST)
public ModelAndView gravar(@Valid Categoria categoria, BindingResult result, RedirectAttributes redirectAttributes){
if (result.hasErrors()){
return form(categoria);
}
daoCat.gravar(categoria);
redirectAttributes.addFlashAttribute("sucesso", "Categoria cadastrado com sucesso!");
return new ModelAndView("redirect:categorias"); //estava visitanteS
}
@RequestMapping(method=RequestMethod.GET)
public ModelAndView listar(){
ModelAndView mv = new ModelAndView("financas/lista");
List<Movimentacao> listaMovimentacaos = dao.listar();
mv.addObject("listaMovimentacaos", listaMovimentacaos);
return mv;
}
}
Movimentacao - modelo
@Entity
public class Movimentacao {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@NotBlank
private String nome;
@NotNull
private Double valor; //colocar melhor tipo depois
@Column(name="recorrente", nullable=false)
private boolean recorrente; //mudar para a classe recorrente
@ManyToOne
@JoinColumn(name="categoria_id")
private Categoria categoria;
private String categoriaString;
//getter e setters ..
Categoria - Model
@Entity
public class Categoria {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@NotBlank
private String nomeCategoria;
@OneToMany(mappedBy="categoria", cascade = CascadeType.ALL, fetch = FetchType.LAZY )
@OrderBy("nome ASC")
private List<Movimentacao> listaMovimentacoes;
public Categoria(){
listaMovimentacoes = new ArrayList<Movimentacao>();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNomeCategoria() {
return nomeCategoria;
}
public void setNomeCategoria(String nomeCategoria) {
this.nomeCategoria = nomeCategoria;
}
/**
* Criação da fk de Categoria dentro da table movimentacao
*/
public Collection<Movimentacao> getListaMovimentacoes(){
return listaMovimentacoes;
}
/**
* Criação da fk de Categoria dentro da table movimentacao
*/
public void addMovimentacao(Movimentacao movimentacao){
if(!getListaMovimentacoes().contains(movimentacao)){
getListaMovimentacoes().add(movimentacao);
if (movimentacao.getCategoria() != null){
movimentacao.getCategoria().getListaMovimentacoes().remove(movimentacao);
}
movimentacao.setCategoria(this);
}
}
}
Lista no JSP
<table
class="table table-condensed table table-striped table table-hover">
<tr>
<th>Nome</th>
<th>valor</th>
<th>recorrente?</th>
<th>Categoria ID</th>
<th>Remover conta?</th>
</tr>
<c:forEach items="${listaMovimentacoes}" var="movimentacao">
<tr>
<th>${movimentacao.nome}</th>
<th>${movimentacao.valor}</th>
<th>${movimentacao.recorrente}</th>
<th>${movimentacao.categoria}</th>
<td><a href="financas/removeMovimentacao?id=${movimentacao.id}">Remover</a>
</tr>
</c:forEach>
</table>