@Embedded - JPA

Olá amigos,
Qual a vantagem ou aplicabilidade de uma classe com @Embedded? Se for para passar link da spec. ou da Oracle agradeço, pois já li e não vi vantagem eu usar isso…

[]´s

Sávio Barros

A vantagem é que você agrupa propriedades e obtém um modelo de objetos mais “OO”

se uma Pessoa e um Fornecedor tem um endereço, porquê mapear duas vezes as mesmas propriedades?

[quote=saviobarr]Olá amigos,
Qual a vantagem ou aplicabilidade de uma classe com @Embedded? Se for para passar link da spec. ou da Oracle agradeço, pois já li e não vi vantagem eu usar isso…

[]´s

Sávio Barros[/quote]

Olá @Embedded(embutido) faz de um objeto um componente, um componente por si só é dependente da classe que o contém no case Cliente tem Endereço endereço eh um forte candidato a embutido, visto que nao existe endereço sem ter um Cliente.
Ai você poderá aplicar a notação @Cascade.ALL, quando persistir um cliente automaticamente o Hibernate ou qualquer outro framework ORM ira persistir o endereço tbm, para deleção o processo eh o mesmo.

Att

[quote=danielbussade][quote=saviobarr]Olá amigos,
Qual a vantagem ou aplicabilidade de uma classe com @Embedded? Se for para passar link da spec. ou da Oracle agradeço, pois já li e não vi vantagem eu usar isso…

[]´s

Sávio Barros[/quote]

Olá @Embedded(embutido) faz de um objeto um componente, um componente por si só é dependente da classe que o contém no case Cliente tem Endereço endereço eh um forte candidato a embutido, visto que nao existe endereço sem ter um Cliente.
Ai você poderá aplicar a notação @Cascade.ALL, quando persistir um cliente automaticamente o Hibernate ou qualquer outro framework ORM ira persistir o endereço tbm, para deleção o processo eh o mesmo.

Att[/quote]
Bom, para persistir em cascata eu não preciso de embedded. Eu uso uma associação simples. Eu sinceramente ainda não vi vantagem (mesmo com sua valiosa explicação) em usar @Embedded. Algum colega pode fazer alguma outra colocação?
Grande abraço a todos.

Sávio Barros

Segue uma diferenca que constatei ao usar @Entity ou @Embeddable:

Dado:


@Entity
@Table(name="tb_user")
public class User{
 
 private String nome;
 private Endereco endereco;

 @JoinColumn(name="endereco)
 public Endereco getEndereco(){

  }

}

entao voce tera q ter uma entidade Endereco

@Entity
@Table(name="tb_endereco")
public class Endereco{
 
private String rua;
 private Integer numero;

}

e entao tera duas tabelas: tb_user e tb_endereco cada uma com seus campos. Os atributos da classe User tornam se campos da tb_user e os campos da classe Endereco tornam-se campos da tb_endereco

se voce usar @Embeddable para Endereco a coisa muda.


@Entity
@Table(name="tb_user")
public class User{
 
 private String nome;
 private Endereco endereco;

 @Embedded
 public Endereco getEndereco(){

  }

}
@Embeddable
public class Endereco{

 private String rua;
 private Integer numero;


}

e entao voce tera apenas uma tabela tb_user com os campos das duas classes (nome, endereco, rua e numero) todos os atributos das duas classes numa tabela so.

foi isso que constatei ao testar as duas situacoes…se alguem tiver algo a mais a acrescentar…

espero ter ajudado…

abracos

:smiley:

Bom dia, Galera!!

Estou com uma duvida, quando eu tenho o endereço de cadastro e Endereço de Entrega, não tem como usar Embedded?

Tentei aqui e deu duplicidade de campos

estou usando hibernate 4

Obrigado desde já.

[quote=bergwin]Bom dia, Galera!!

Estou com uma duvida, quando eu tenho o endereço de cadastro e Endereço de Entrega, não tem como usar Embedded?

Tentei aqui e deu duplicidade de campos

estou usando hibernate 4

Obrigado desde já.[/quote]

Bergwin, também tive esse problema, acredito que ocorra por não ter especificado o nome das colunas. Resolvi da seguinte forma:

	@AttributeOverrides({
		@AttributeOverride(name="ddi",column=@Column(name="NUM_DDI_1", length=3)),
		@AttributeOverride(name="ddd",column=@Column(name="NUM_DDD_1", length=4)),
		@AttributeOverride(name="sufixo",column=@Column(name="NUM_TEL_1", length=9))
	})
	@Embedded
	private Telefone telefone = new Telefone();
	
	@AttributeOverrides({
		@AttributeOverride(name="ddi",column=@Column(name="NUM_DDI_2", length=3)),
		@AttributeOverride(name="ddd",column=@Column(name="NUM_DDD_2", length=4)),
		@AttributeOverride(name="sufixo",column=@Column(name="NUM_TEL_2", length=9))
	})
	@Embedded
	private Telefone celular = new Telefone();

Espero ter ajudado.
Abraços.