[RESOLVIDO] Mapeamento Embeddable como tabela

1 resposta
B

Fala pessoal,

to usando JPA/Hibernate 3

Tem como eu mapear uma classe anotada como Embeddable, criando uma tabela nova, ao invés dos atributos ficarem dentro da tabela da classe que utiliza o atributo como Embedded?

Por exemplo:

Embeddable
public class Fechamento
{
  // getters.. setters
  
  @Column(nullable=false)
  private Date dataHora;
}

public class Tarefa
{
  // getters.. setters e outros atributos

  @Embedded
  private Fechamento fechamento
}

public class Pedido
{
  // getters.. setters e outros atributos

  @Embedded
  private Fechamento fechamento
}

Com esse codigo aí em cima, o atributo dataHora da classe Fechamento sera colocado como campo das tabelas Tarefa e Pedido.

Eu queria poder mapear criando uma tabela fechamento_tarefa e fechamento_pedido.

Tem como mapear assim usando annotations?

Ou eu vou ter que criar uma classe FechamentoTarefa e FechamentoPedido herdando de Fechamento?

VLW

1 Resposta

B

Bom, depois que eu postei a pergunta, eu lembre do @SecondaryTable, que resolveu o meu problema.

Eu so nao gostei muito de ter que colocar todos os atributos no mapeamento, entao ficou assim:

Embeddable
public class Fechamento
{
  // getters.. setters
 
  @Column(nullable= false)
  private Date dataHora;
}

@Entity
@SecondaryTable(name="tarefa_fechamento")
public class Tarefa
{
  // getters.. setters e outros atributos

    @Embedded
    @AttributeOverrides({
      @AttributeOverride(name="dataHora", column=@Column(table="tarefa_fechamento")),
    })
  private Fechamento fechamento;
}

@Entity
@SecondaryTable(name="tarefa_fechamento")
public class Pedido
{
  // getters.. setters e outros atributos

    @Embedded
    @AttributeOverrides({
      @AttributeOverride(name="dataHora", column=@Column(table="pedido_fechamento"))
    })
  private Fechamento fechamento;
}

Eu so achei que, dessa forma, tenho que ficar colocando muitos detalhes da classe, mapeando campo a campo, mas resolveu.

VLW

Criado 31 de agosto de 2008
Ultima resposta 31 de ago. de 2008
Respostas 1
Participantes 1