Galera,
Como já falei aqui antes, sou iniciante no vraptor.
Ele é excelente para me deixar de cabelo branco.rssrs.
Vamos, lá.
Pelo que eu entendi, e so anotar a classe com @SessionScoped. Para ele ser salvo na sessão, e ser único.
Estou fazendo uma loja virtual. Utilizei a apostila FJ-28.
Mas na apostila, eles não salvam no banco o carrinho de compras.
E eu estou tentando salvar ele no banco de dados.
A principio, fiz uma outra classe chamei-a de orçamento.
Fiz o relacionamento, com itens.
Quando a pessoal clicar em Novo Orçamento, eu crio no banco de dados um orçamento.
Conforme a pessoa vai escolhendo os itens do orçamento, ela vai adicionando e já vai salvando esses itens também no banco.
So que, eu preciso enviar junto com o novo item adicionando o codigo do produto e o codigo do orçamento.
O codigo do produto, está indo certinho, já o codigo do orçamento não vai.
Olha como ficou minha classe Orcamento.java - ela está no meu modelo.
@Entity
@Component
@SessionScoped
public class Orcamento {
//váriaveis
@Id @GeneratedValue
private Long id;
private String numero;
private double total;
private double desconto;
private double frete;
/Relacionaomento com orcamentoItens
@OneToMany(mappedBy = "orcamento",targetEntity= Itens.class,
fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List <Itens> itens;
//Metodos get e set
Minha classe Itens.java - Também está no meu modelo.
@Entity
public class Itens {
@Id @GeneratedValue
private Long id;
private double quantidade;
//Relacionamento com Produtos
@ManyToOne
@JoinColumn(name="produto_id")
private Produto produto;
//Relacionaomento com orcamento
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="orcamento_id")
private Orcamento orcamento;
//Métodos Set e get
Tenho o controller de cada uma, que salva no banco de dados.
Na minha lista de produtos, e adicionei um botão adicionar a cada produto.
Ficou assim.
lista.jsp - esta em jsp/produtos
<!-- Adicionando o produto ao orçamento -->
<td>
<form action="<c:url value="/itens"/>" method="POST">
<input type="hidden" name="itens.produto.id"
value="${produto.id}"/>
<input class="qtde" name="itens.quantidade" value="1"/>
<input type="hidden" name="itens.orcamento.id"
//Orçamento
value="${orcamento.id}"/>
<button type="submit">Adicionar</button>
</form>
</td>
Teoricamente, era pra quando eu clicar em adicionar.
Ele salva o item, com o id do produto e do orçamento.
Como eu falei, do produto ele salva corretamente, já do orçamento ele fala que não encontrou a referência.
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.caelum.goodbuy.modelo.Orcamento
Se eu alterar e colocar o id do orçamento no campo ‘value’ ele salva corretamente.
Já tentei colocar o orçamento no interceptor, para aparecer em todas as páginas, também não rolou.
Podem me ajudar?
Valeu Galera!