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
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
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.