Galera seguinte to com uma grande duvida primeiro seguinte eu tenho 3 classes relacionadas
Pessoa
PessoaJuridica
Credenciado
seguinte
Pessoa Juridica esta relacionado um para um com Pessoa Juridica
e o Credenciado esta relacionado de um para um com Credenciado
e para fazer o cadastro de credenciados eu utilizo um unico form que grava em tres tabelas esta funcionando mais nao sei se estou fazendo da melhor forma ou se terei problemas com isso.
vou postar os codigos
@Entity
public class Pessoa {
@Id
@GeneratedValue
private Long idPessoa;
//sets e getters
}
@Entity
public class Pessoajuridica {
// Fields
@Id
@GeneratedValue
private Long idPessoajuridica;
//Relacionamento com a classe pessoa
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="id_pessoa",insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Pessoa pessoa;
//sets and getters
}
@Entity
public class Credenciado {
// Fields
@Id
@GeneratedValue
private Long idCredenciado;
//Relacionamento com a classe pessoa
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="id_pessoajuridica",insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Pessoajuridica pessoajuridica;
//sets and getters
}
@Component("credenciado")
@InterceptedBy({/*AutorizadorInterceptor.class,*/DaoInterceptor.class})
//@InterceptedBy(DaoInterceptor.class)
public class CredenciadoLogic {
private final DaoFactory daofactory;
@In(scope=ScopeType.SESSION, required=false)
@Out(scope=ScopeType.SESSION)
private Credenciado credenciado;
private List<Credenciado> credenciados;
@In(scope=ScopeType.SESSION, required=false)
@Out(scope=ScopeType.SESSION)
private Pessoajuridica pessoajuridica;
private List<Pessoajuridica> pessoajuridicas;
@In(scope=ScopeType.SESSION, required=false)
@Out(scope=ScopeType.SESSION)
private Pessoa pessoa;
private List<Pessoa> pessoas;
public CredenciadoLogic(DaoFactory daofactory) {
this.daofactory = daofactory;
}
// Metodo para formulario
public void formulario() {
}
// Metodo para gravar um Credenciado/PessoaJuridica/Pessoa
public void armazena(Credenciado credenciado, Pessoajuridica pessoajuridica, Pessoa pessoa) {
Calendar calendar = new GregorianCalendar();
Date hoje = new Date();
pessoa.setDtcadastro(hoje);
this.daofactory.beginTransaction();
this.daofactory.getPessoaDao().adiciona(pessoa);
this.pessoa = daofactory.getPessoaDao().procura(pessoa.getIdPessoa());
pessoajuridica.setPessoa(this.pessoa);
this.daofactory.getPessoajuridicaDao().adiciona(pessoajuridica);
this.pessoajuridica = daofactory.getPessoajuridicaDao().procura(pessoajuridica.getIdPessoajuridica());
credenciado.setPessoajuridica(this.pessoajuridica);
this.daofactory.getCredenciadoDao().adiciona(credenciado);
this.daofactory.getPessoaDao().atualiza(pessoa);
this.daofactory.getPessoajuridicaDao().atualiza(pessoajuridica);
this.daofactory.getCredenciadoDao().adiciona(credenciado);
this.daofactory.commit();
if (this.pessoa != null) {
this.pessoa = null;
}
if (this.pessoajuridica != null) {
this.pessoajuridica = null;
}
if (this.credenciado != null) {
this.credenciado = null;
}
}
<form name="fcadcred" action="credenciado.armazena.logic">
<center><table style=table style="width: 784px;">
<tr>
<td>
<h3></h3>
<ul id="errors" >
<c:forEach var="error" items="${errors.iterator}">
<li>${error.key}</li>
</c:forEach>
</ul>
</td>
</tr>
</table></center>
<center><table style=table style="width: 784px;">
<input type="hidden" name="pessoa.idPessoa" style="width: 46px" readonly="readonly" value="${pessoa.idPessoa}">
<input type="hidden" name="pessoajuridica.idPessoajuridica" style="width: 46px" readonly="readonly" value="${pessoajuridica.idPessoajuridica}">
<input type="hidden" name="credenciado.idCredenciado" value="${credenciado.idCredenciado}" style="width: 76px" readonly="readonly">
<tr><td colspan="2" align=center>Credenciado</td></tr>
<tr>
<td width="150" align=right>Nome Fantasia</td>
<td ><input type="text"
name="pessoajuridica.nomeFantasia" value="${pessoajuridica.nomeFantasia}" width="250"
style="width: 210px"></td>
</tr>
<tr>
<td width="150" align=right>Razao Social</td>
<td >
<input type="text" name="pessoajuridica.razaoSocial"
value="${pessoajuridica.razaoSocial}" ></td>
</tr>
<tr>
<td width="150" align=right>CNPJ</td>
<td><input type="text" name="pessoajuridica.cnpj"
value="${pessoajuridica.cnpj}"></td>
</tr>
<tr>
<td width="150" align=right>Inscrição Estatual</td>
<td><input type="text" name="pessoajuridica.inscEstatual"
value="${pessoajuridica.inscEstatual}"></td>
</tr>
<tr>
<td width="150" align=right>Observa;'ao</td>
<td><input type="text" name="pessoa.observacao"
value="${pessoa.observacao}"></td>
</tr>
<tr>
<td width="150" align=right>Seguimento</td>
<td ><input type="text"
name="credenciado.seguimento" value="${credenciado.seguimento}" width="250"
style="width: 210px"></td>
</tr>
<tr>
<td width="150" align=right>descrição</td>
<td >
<input type="text" name="credenciado.descricao"
value="${credenciado.descricao}" ></td>
</tr>
<tr>
<td width="150" align=right>Proprietario</td>
<td><input type="text" name="credenciado.proprietario"
value="${credenciado.proprietario}"></td>
</tr>
<tr>
<td width="150" align=right>Banco</td>
<td><input type="text" name="credenciado.banco"
value="${credenciado.banco}"></td>
</tr>
<tr>
<td width="150" align=right>Agencia</td>
<td><input type="text" name="credenciado.agencia"
value="${credenciado.agencia}"></td>
</tr>
<tr>
<td width="150" align=right>Conta</td>
<td><input type="text" name="credenciado.conta"
value="${credenciado.conta}"></td>
</tr>
<tr>
<td width="150" align=right>titular</td>
<td><input type="text" name="credenciado.titular"
value="${credenciado.titular}"></td>
</tr>
<tr>
<td width="150" align=right>Percentual</td>
<td><input type="text" name="credenciado.percentual"
value="${credenciado.percentual}"></td>
</tr>
<tr>
<td width="150" align=right>Tipo</td>
<td><input type="text" name="credenciado.tipo"
value="${credenciado.tipo}"></td>
</tr>
</table></center>
public class Dao<T> {
private final Session session;
@SuppressWarnings("unchecked")
private final Class classe;
@SuppressWarnings("unchecked")
public Dao(Session session, Class classe) {
this.session = session;
this.classe = classe;
}
public void adiciona(T objeto) {
this.session.save(objeto);
}
public void remove(T objeto) {
this.session.delete(objeto);
}
public void atualiza(T objeto){
this.session.merge(objeto);
}
}
Daofactory
public class DaoFactory {
private final Session session;
private Transaction transaction;
public DaoFactory() {
session = HibernateUtil.getSession();
}
// Metodo obrigatório para classe PessoaLogic retorna a pessoa para edição
public Dao<Pessoa> getPessoaDao(){
return new Dao<Pessoa>(this.session, Pessoa.class);
}
// Metodo obrigatório para classe Pessoajuridica (pessoa)
public Dao<Pessoajuridica> getPessoajuridicaDao(){
return new Dao<Pessoajuridica>(this.session, Pessoajuridica.class);
}
//Metodo obrigatório para classe Credenciado (pessoajuridica)
public Dao<Credenciado> getCredenciadoDao(){
return new Dao<Credenciado>(this.session, Credenciado.class);
}
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
public void commit() {
this.transaction.commit();
this.transaction = null;
}
public boolean hasTransaction() {
return this.transaction != null;
}
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
public void close() {
this.session.close();
}
}
acho que nao e por ai ne galera ajudai tipo vc vem que eu tenho que setar como null no final do armazena se nao ele fica na memoria acho que se diz dethached… se ao inves de usar adicionar(save) no lugar de atualiza(merge) ele nao consegue pegar o id adicionado para setar para a proxima classe so consegui assim acho que ficou uma ganbiarra ne
e outra coisa como foca para excluir com esse tipo de relacionamento pois o meu aqui nao ta funcionando vlw