Vraptor + JPA - como salvar uma lista de dados para uma pessoa

13 respostas
W

Pessoal o titulo não foi muito claro, mais a dúvida é a seguinte: tenho uma sessão onde salvo os itens de um orçamento: como se fosse uma compra onde tenho vários itens e tenho que salva-los na conta de um usuário no BD:

Exemplo:

Paciente: Rafael

DENTE CANINO: RESTAURAÇÃO - R$ 60
DENTE MOLAR: EXTRAÇÃO - R$ 100
DENTE SEGUNDO MOLAR: EXTRAÇÃO - R$ 100

total:R$ 260

e salvar tudo no nome do paciente Rafael para ter o histórico dele salvo.

A sessão já esta beleza só não sei como faço para jogar a lista inteira com o orçamento para o BD.

Aguardo a ajuda! Obrigado :slight_smile:

13 Respostas

H

Você sabe como jogar um item único?

Se sim, faça um for e mande um por um. =D

W

Com o for ele jogaria todos de um vez só correto?

mais a estrutura do BD ficaria assim correto?

Paciente: Rafael | DENTE CANINO| RESTAURAÇÃO - R$ 60
Paciente: Rafael |DENTE MOLAR| EXTRAÇÃO - R$ 100
Paciente: Rafael |DENTE SEGUNDO MOLAR| EXTRAÇÃO - R$ 100

seria uma linha para cada tratamento correto?

teria um exemplo do for para eu me orientar

Obrigado

H

for(Carro carro: carros){ salvaCarro(carro); }
Até onde sei, não existe método que salve uma lista inteira. Tem que ser um por um.

W

mas por exemplo: quanto temos um carrinho de compras com vários itens, e compramos ele salva todos os itens para sua conta?
essa seria minha ideia.

H

well:
mas por exemplo: quanto temos um carrinho de compras com vários itens, e compramos ele salva todos os itens para sua conta?
essa seria minha ideia.
O que você poderia fazer é salvar com Cascade.
Você salvaria o objeto pedido e os itens seriam salvos automaticamente.

Esse post mostra como utilizar Cascade: JPA: Mini Livro - Primeiros passos e conceitos detalhados.

L

faz o orçamento ter uma lista de itens e vc faz um relacionamento um pra muitos no banco…

no hibernate/jpa vc faz:

@Entity
public class Item {
  //...
  @ManyToOne
  Orcamento orcamento;
}

@Entity
public class Orcamento {
   
   @OneToMany(mappedBy="orcamento")
   List<Item> itens;
}
W

@Lucas.

Fiz conforme a primeira postila do fj28 um relacionamento manytomany

troquei o nome da classe agora é venda e Não orçamento fiz um relacionamento ManyToMany

@ManyToMany
	private List<Item> items = new ArrayList<Item>();

essa lista de itens contem produtos preço qtd igual a apostila nova, fiz baseado nela.

com esse relacionamento foi criado no banco a tabela venda com id e o usuario que realiza a compra, no meu caso o usuario logado, e criou uma tabela auxiliar venda_item com os campos venda_id e itens_id

e no vendasController

fiz assim
@Restrito
	@Post @Path("/vendas")
	public void adiciona(Venda venda){
		
		venda.setItems(this.carrinho.getItens());//pega os itens do carrinho e salva na venda
		dao.adiciona(venda);
		
		result.redirectTo(VendasController.class).lista();
	}

porem não esta funcionando; no console executa o seguinte HQL

Hibernate: 
    insert 
    into
        Venda
        (usuario_login) 
    values
        (?)
Hibernate: 
    insert 
    into
        Venda_Item
        (Venda_id, items_id) 
    values
        (?, ?)
Hibernate: 
    select
        venda0_.id as id11_,
        venda0_.usuario_login as usuario2_11_ 
    from
        Venda venda0_

mais o BD nao recebe informação alguma.

o que estou fazendo de errado?

R

Faz como o Herbert falou.

L

isso está dentro de uma transação?

R

Estou quebrando cabeça para alcançar este mesmo fim, salvar uma compra, venda ou orçamento.

Segue linha de raciocínio, analise pra eu entender melhor.

Consultor acessa o sistema e vai adicionando itens no gerador de orçamento ou vendas (carrinho).

:idea: Teria como a gente depois de gerar o orçamento recuperar os dados do cliente já cadastrado, e por fim salvar tudo na tabela orcamento.

ou

:idea: Criar um botão “Gerar Orçamento” na lista de cliente e encaminha usuário para gerar o orçamento já com os dados do cliente.

Desde já agradeço

L

tem… geralmente vc recupera esses dados pelo id do cliente… só manter esse id no orçamento.

R

Voce pode modelar assim. Tabela Cliente e Tabela orçamento, onde a tabela orcamento tera uma chave estrangeira apontando para o id da tabela cliente. Na hora de pegar o orçamento, basta fazer um join.

R

tá phoda fazer esses relacionamentos com o hibernate. Alem desse que preciso fazer, gostaria de fazer outros que fazer outros.

JDBC é tranquilo.

Mas sou tão persistente quando ele.

Navegando aqui pelo guj encontrei uma discução referente ao caso http://www.guj.com.br/java/292495-onetoone-bidirecional#1552072

“JPA: Mini Livro - Primeiros passos e conceitos detalhados”

Se puderem dar uma olhada nesse post do link acima, por gentilza.

Agradeço

Criado 16 de janeiro de 2013
Ultima resposta 3 de fev. de 2013
Respostas 13
Participantes 5