E ai pessoal,
Estou iniciando com hibernate e não estou conseguindo inserir dados em duas tabelas com um único form.
Alguém sabe como devo fazer?
Minhas entidades
@Entity
public class Chamado {
@Id @GeneratedValue
private Long Id;
private String ocorrencia;
private String prioridade;
private String tipo;
@Temporal(TemporalType.DATE)
private Calendar data;
@Entity
public class Solicitante {
@Id @GeneratedValue
private long id;
private String solicitante;
private String ramal;
private String setor;
@ManyToOne
private Chamado chamado;[/code]
Meu DAO
[code]//adiciona
public void adiciona (T t){
this.em.persist(t);
}
Tentei da seguinte forma
public void adicionaChamado(Solicitante solicitante, Chamado chamado){
dao.adiciona(solicitante);
dao.adiciona(chamado);
}
Opa, elias.castro, beleza?
Cara, sua navegação não tá errada não?
Veja só: o correto não seria dizer “Um solicitante possui vários chamados, e um chamado pertence a um único solicitante”?
Se for o caso, o seu mapeamento deveria ser da seguinte forma?
[code]@Entity
public class Solicitante {
@Id @GeneratedValue
private long id;
private String solicitante;
private String ramal;
private String setor;
@OneToMany(mappedBy="solicitante")
private List<Chamado> chamados;
public Solicitante() { chamados = new ArrayList<Chamado>(); }
public void addChamado(Chamado chamado) {
chamados.add(chamado);
}
}
@Entity
public class Chamado {
@Id @GeneratedValue
private Long Id;
private String ocorrencia;
private String prioridade;
private String tipo;
@Temporal(TemporalType.DATE)
private Calendar data;
@ManyToOne
private Solicitante solicitante;
}
[/code]
De qualquer modo, se você mapear a coleção de chamados para o solicitante, ao invés de adicionar do modo que você fez, ficaria assim:
Solicitante solicitante = new Solicitante();
solicitante.setNome("ZÉ DAS COUVES");
solicitante.addChamado(new Chamado("Chamado número 1"));
solicitante.addChamado(new Chamado("Chamado número 2"));
solicitante.addChamado(new Chamado("Chamado número 3"));
dao.adiciona(solicitante);
Tenta assim, e qualquer coisa avisa aqui no tópico.
Espero ter ajudado,
fique com Deus! 
Nicolas, valeu pela ajuda.
Mudei as minhas entidades, mas ainda não estou conseguindo gravar através do meu formulário.
Segue o formulário para vc dar uma olhada.
Estou utilizando vrptor como framework, não sei se influência alguma coisa.
Os campos que vão preencher a entidade Solicitante está no início, o resto é da entidade Chamado.
<table>
<form action="adiciona" method="post" id="ChamadoForm" >
<tr>
<td colspan="2">
<label>*Solicitante:<br /></label>
<input type="text" size=50 name ="solicitante.solicitante" required />
<td>Ramal:<br> <input type="text" name= "solicitante.ramal" ></td>
<td>Setor:<br> <input type="text" name= "solicitante.setor"></td>
<tr>
<td colspan="3">*Ocorrência:<br> <input type="text" size=77 name="chamado.ocorrencia" required /></td>
<td>*Data: <br>
<input type="text" name="chamado.data" id="date" required/></td>
</tr>
<tr>
<td>
Tipo:<br>
<SELECT NAME="chamado.tipo" style="width:150px">
<OPTION>Hardware
<OPTION>Software
<OPTION>Outros
</SELECT>
</td>
<td>
Prioridade:<br>
<SELECT NAME="chamado.prioridade" style="width:150px">
<OPTION>Baixa
<OPTION>Méida
<OPTION>Alta
</SELECT>
</td>
<td>
Computador/Dispositivo:<br>
<input type="text" name="chamado.equipamento">
</td>
<td>
Sistema Operacional: <br>
<SELECT NAME="chamado.sistemaOperacional" style= "width:150px">
<OPTION>
<OPTION>Linux
<OPTION SELECTED>Windows
<OPTION>Mac-OS
<OPTION>Outros
</SELECT>
</td>
</tr>
<tr>
<td colspan="4">
*Descrição: <br />
<textarea name="chamado.descricao" rows="5" cols="80" required></textarea></td>
</tr>
<tr>
<td>
<input type="hidden" name="transacao" value="AdicionaChamado" />
<input type="submit" value="Cadastrar" id="alerta" >
<input type="reset" value="Limpar"></td>
</tr>
</form>
</table>
elias, pelo que vejo, o problema não é no seu formulário, e sim nas suas Actions.
Mostre-nos qual o código da action adiciona, e assim podemos ver qual é o problema.
Fique com Deus! 