Fórum Transação Hibernate #446406

23/06/2013

0

Boa noite pessoal estou com uma dúvida referente a Transação, estou fazendo cadastro de empresa onde tem endereço estou usando duas entidade endereco e empresa, estou na dúvida referente a integridade desses dados. Estou usando dessa forma no meu bean

if (empresa.getId() == null) {
enderecoDAO.addEndereco(endereco);
System.out.println(endereco.getId());
empresa.setEndereco(endereco);
empresaDAO.addCategoria(empresa);
FacesMessage facesMessage = new FacesMessage(
"Empresa cadastrado com Sucesso! ");
fc.addMessage(null, facesMessage);
}

DAOGENERIC

protected void savaPojo(Serializable pojo){
Session ses = getSession();
ses.saveOrUpdate(pojo);
ses.getTransaction().commit();
ses.close();
}
EmpresaDAO
public int addCategoria(Empresa empresa){
savePojo(empresa);
return empresa.getId();
}

EndercoDAO
public int addEndereco(Endereco endereco) {
savePojo(endereco);
return endereco.getId();
}

gostaria de saber que forma vocês usam, alguém pode me ajudar?

grato!
Adriano Aguiar

Adriano Aguiar

Responder

Posts

23/06/2013

Marcelo Senaga

No caso a operação de salvamento das 2 entidades deveria ser atômica, certo?
Uma forma seria enviar a entidade empresa (com o endereço setado), e o DAO da Empresa persistir as duas entidades numa mesma transação, e se tudo der certo, dar commit.
Responder

Gostei + 0

24/06/2013

Adriano Aguiar

teria como me explicar melhor, porque ao mesmo tempo que gero uma cadastro já seto o valor do objeto, dessa forma como seria?

att
Responder

Gostei + 0

25/06/2013

Marcelo Senaga

teria como me explicar melhor, porque ao mesmo tempo que gero uma cadastro já seto o valor do objeto, dessa forma como seria?

att


Teria como postar o código das 2 entidades. Ai ficaria mais fácil analisar e te passar uma solução mais concreta.
Responder

Gostei + 0

25/06/2013

Adriano Aguiar

Eu cadastro endereço assim que cadastro recupero o ID e seto em empresa.setEndereco(endereco), não sei se da para entender?

att
Responder

Gostei + 0

29/06/2013

Marcelo Senaga

Eu cadastro endereço assim que cadastro recupero o ID e seto em empresa.setEndereco(endereco), não sei se da para entender?

att


Deu sim. Dessa forma está correta sim. Outro jeito é usando Cascate, onde ao salvar a entidade principal, ela já seta a dependência:

http://www.rndblog.com/hibernate-how-to-insert-onetomany-children-by-cascade/
Responder

Gostei + 0

29/06/2013

Adriano Aguiar

Esse é código da duas classes

@Entity
@Table(name = "empresa")
public class Empresa implements Serializable {

private static final long serialVersionUID = -312317668584983632L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id ;
@Column(name = "nome", length = 60)
private String nome;
@Column(name = "RazaoSocial", length = 100)
private String razaoSocial;
@Column(name = "CNPJ", length = 100)
private String cnpj;
private String inscricaoEstadual;
@Column(name = "Email", length = 100)
private String email;
@Column(name = "telefone", length = 20)
private String telefone;
@ManyToOne
@JoinColumn(name = "id_endereco")
@NotNull
private Endereco endereco;

}


Entity
@Table(name = "endereco")
public class Endereco implements Serializable {
private static final long serialVersionUID = -312317668584983632L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "Rua", length = 100)
private String rua;
@Column(name = "numero", length = 10)
private Integer numero;
@Column(name = "complemento", length = 60)
private String complemento;
@Column(name = "CEP", length = 10)
private String cep;
@Column(name = "Bairro", length = 40)
private String bairro;
@ManyToOne
@JoinColumn(name = "id_cidade")
@NotNull
private Cidade cidade;
}
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar