Mapeando Maps de String em entidades

Como mapear um Map em JPA ? Segue a baixo um exemplo da entidade Produto que tem uma descrição por língua. Para resolver esse problema mapearemos o atributo descrições como: Map<Locale, String> :

@Entity
public class Produto {

  @Id
  private Long id;

  @ElementCollection(fetch = FetchType.EAGER)
  @MapKeyColumn(name = "locale")
  @Column(name = "descricao")
  @CollectionTable(name = "produto_descricao", 
       joinColumns = @JoinColumn(name = "id"))
  private Map<Locale, String> descricoes;
  • @ElementCollection: Define o mapeamento para atributos do tipo “Basic”;
  • fetch = FetchType.EAGER: Faz com que o Map sempre seja carregado quando carregar o objeto produto;
  • @MapKeyColumn(name = “locale”): Define o nome da chave do Map;
  • @Column: Define o nome do valor do Map
  • @CollectionTable: Define a tabela que será inserido os valores do Map;
  • name = “produto_descricao”; : Nome da tabela;
  • joinColumns = @JoinColumn(name = “id” : A “amarração” de produto com a tabela produto_descricao.

SQL do mapeamento

CREATE TABLE produto_descricao (
  id bigint NOT NULL,
  descricao character varying(255),
  locale character varying(255) NOT NULL,
  CONSTRAINT produto_descricao_pk PRIMARY KEY (id, locale),
  CONSTRAINT produto_descricao_fk FOREIGN KEY (id) REFERENCES produto (id)
)
  • id : ID do produto;
  • produto_descricao_pk: A PK é formado pelo ID do produto + chave do Map
  • produto_descricao_fk: A referencia para o ID do produto
Observação
A PK é composto pelo id e locale para garantir que a chave do Map é unica para aquele produto.
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.