JPA - Hibernate: Mapeamento de associações com Interfaces

Fala pessoal,

tenho um estrutura de classes assim:

public class NotaFiscal
{
    @ManyToOne
    @JoinTable
    private IDestino destino;
}

public interface IDestino
{
   String getNome();
   void setNome(String nome);
}

@Entity
public class Cliente implements IDestino
{
    // get/set construtor

    @Id
    private Long id;
}

@Entity
public class Fornecedor implements IDestino
{
    // get/set construtor

    @Id
    private Long id;
}

Quando eu tento levantar o Hibernate, ele diz que IDestino nao é uma entidade.

Realmente, IDestino nao é uma entidade, e nem é para ser.

Como eu faria essa mapeamento entao?

No banco de dados, deveram ser criadas 5 tabelas:
NotaFiscal
Cliente
Fornecedor
NotaFiscal_Cliente
NotaFiscal_Fornecedor

VLW

Olá, baison.

Infelizmente, parece que o Hibernate ainda não suporta uma hierarquia de classes com interfaces. O jeito é você usar uma classe abstrata no lugar da interface, que vira uma entidade também.

Sua interface viraria:

@Entity
public abstract class IDestino  
{  
   abstract String getNome();  
   abstract void setNome(String nome);  
}  

É, pelo o que eu tenho visto nao vai ter jeito mesmo nao, vou ter que fazer isso mesmo.

Até postei la no forum do hibernate.org, mas até agora nada.

VLW ae…

tem jeito sim…

@ManyToOne( targetEntity=Cliente.class )

http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#d0e1139

[quote=tubiluki]tem jeito sim…

@ManyToOne( targetEntity=Cliente.class )

http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#d0e1139[/quote]

É, isso serviria se eu tivesse apenas uma classe implementando essa interface, mas no meu caso, eu posso ter n implementações para a minha interface, no caso, não seria apenas Cliente…

Teria que ser algo assim:

@ManyToOne( targetEntity=Cliente.class, Fornecedor.class ) 

Mas obrigado pela dica.