Duvida persistindo 1 para n - hibernate + vraptor

8 respostas
M

galera tenho uma outra duvida seguinte tenhos duas classas anotadas 1 para n

Classe Cliente
Classe Dependente

Um Cliente pode ter varios dependentes

seguinte quando vou persistir quero sabe como faco para persistir varios dependentes ao mesmo tempo ou presciso fazer um por um e na hora de lista uso um displaytag prescisos configurar algo.

8 Respostas

M

vamos la galera ajuda ai!!!

prescisam que eu poste as classes, logics e jsp

ninguem tem um exemplo ai para eu utilizar

se prescisarem diz ai

P

Não entendi bem a sua pergunta. Coloca um trecho do código e explica melhor. To trabalhando com hibernate e VRaptor, talvez possa te ajudar.

Abraço

M

galera acho que nao consegui me explicar direito ne foi mal

seguinte galera to trabalhand em um relacionamento 1 para n
entre duas classes a classe Cliente e a Dependente

Cliente = 1
Dependente = N

consigo persistir normalmente agora eu queria saber o seguinte como faço para que durante o cadastro do cliente eu consiga cadastrar dois ou tres dependentes. nesse cliente eu consigo cadastra apenas um entende nao sei como faco no vraptor para cadastra mais dependentes.

Dependente.java
@Entity
public class Dependente implements java.io.Serializable {

	// Fields
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id_dependente")
	private Long id;

                 @OneToMany(mappedBy="dependente",targetEntity=Cliente.class,
    fetch=FetchType.EAGER)
                 private Collection cliente; 

               //Sets e Getters
Cliente.java
@Entity
public class Cliente implements java.io.Serializable {

	@Transient
	private int temporaria;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id_cliente")
	private Long id;
                @ManyToOne(optional=false)
                @JoinColumn(name="id_dependente",referencedColumnName="id_dependente")
                private Dependente dependente;
//seters and getters
formulario.ok.jsp
%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>

<html>
	<body>
		<h1> 
			Cadastro de Clientes 
		</h1>
		<form action="cliente.armazena.logic" method="get" name="CadastroCliente">
			<input type="hidden" name="cliente.id" value="${cliente.id}" />
			Nome do Cliente
			<input type="text" name="cliente.dependente.id"
			value="${cliente.dependente.id}" />
			<input type="submit" />

		</form>
	</body>
</html>
P

Cara,

o seu cliente não pode ter um dependente, ele tem que ter uma lista de dependentes.

Cliente.java   
@Entity   
public class Cliente implements java.io.Serializable {   
  
    @Transient   
    private int temporaria;   
       
    @Id   
    @GeneratedValue(strategy = GenerationType.IDENTITY)   
    @Column(name="id_cliente")   
    private Long id;   

    @OneToMany
    private List&lt;Dependente&gt; dependente;   

//seters and getters

E o relacionamento é OneToMany, ja que um cliente pode ter vários dependentes.

No vRaptor, para em um formulário vc enviar vários dependentes, vc tem q trabalhar com uma estrutura no jsp que parece um array. Da uma olhada no site do vRaptor que deve te ajudar.

Qualquer coisa grita

M

entaum agora eu acho que agora o relacionamento esta certo mais quando eu mando persistir ele nao persiste o id_dependente ele fica como null nao sei porque veja como ficou o codigo da minha jsp

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display"%>

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>Cadastro de Clientes</title>
		<link rel="stylesheet" type="text/css" href="css/style.css" />
		<script language="javascript">
        var last = 0;
        function create() {
                last++;
        dynamic_form.innerHTML += base_form.innerHTML.replace(/[[0]]/g, last + "]");
        }
</script>
	</head>
	<body>
		<h1>
			CCadastro de Clientes
		</h1>
		<form action="cliente.armazena.logic" method="get">
			
				<input type="hidden" name="cliente.id" value="${cliente.id}" />
			<div id="base_form">
				Dependente
				<input type="text" name="cliente.dependente[0].id"
					value="${cliente.dependente[0].id}" />
				<hr />
			</div>
			<div id="dynamic_form">
			</div>
			<a href="javascript:create();">New entry</a>
			<br />
			<br />
			<input type="submit" />
		</form>
	</body>
</html>
ClienteLogic.java
@Component
@InterceptedBy(DaoInterceptor.class)
public class ClienteLogic {

	private final DaoFactory daoFactory;
	private Cliente cliente;
	private List<Cliente> clientes;
	@Parameter(create = true)
	private List<Dependente> dependentes;


	public ClienteLogic(DaoFactory daoFactory) {
		this.daoFactory = daoFactory;
	}
	public void formulario() {
	}

	public void editar(Cliente cliente) {
		// carrega os dados no banco para edicao
		this.cliente = this.daoFactory.getClienteDao().procura(cliente.getId());
	}
	// Adiciona um genero novo ou atualiza se for edicao
	public void armazena (Cliente cliente) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getClienteDao().atualiza(cliente);
		this.daoFactory.commit();
		System.out.println("Adicionou Cliente:" + cliente.getNome());
	   // System.out.printf("Adicionou %s ao banco!%n", dependentes.toString());

	}
	// Remove um genero novo ou atualiza se for edicao
	public void remove (Cliente cliente) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getClienteDao().remove(cliente);
		this.daoFactory.commit();
		System.out.println("Removeu o Cliente:" + cliente.getNome());
	}
	public void lista () {
		this.clientes = this.daoFactory.getClienteDao().listaTodos();
		System.out.println("Removeu o Cliente:" + clientes);
	}
	public Cliente getCliente() {
		return cliente;
	}
	public List<Cliente> getClientes() {
		return clientes;
	}
	//list para relacionamentos
	// metodo usado para popular o select
	public List<Funcionario> getListaFuncionarios() {
		return this.daoFactory.getFuncionarioDao().listaTodos();
	}
	public List<Dependente> getDependentes() {
		return this.dependentes;
	}

}

quando mando gravar no banco ele grava mais nao atualiza a tabela dependente com o ip do cliente. mais nao da nenhum erro

P

Cara,

to enroladasso no trampo agora.

assim que chegar em casa vou dar uma atenção pra isso ai e posto o que encontrar valew?

Abraço

M

ai valeu mesmo fica frio ajuda dentre de suas possibilidades que ja sou muito grato vlw

M

ai galera me ajudem ai!!! ainda não resolvi

Criado 4 de agosto de 2008
Ultima resposta 11 de ago. de 2008
Respostas 8
Participantes 2