Dúvida Orientação a Objetos + Persistência de Interfaces no Hibernate 3.4

Preciso persistir pessoas físicas, pessoas jurídicas, fornecedores e outras classes que não influenciam na minha dúvida. Uma classe X qualquer possui 1 fornecedor. 1 fornecedor possui atributos próprios, e pode ser pessoa fisica ou pessoa juridica (esse ‘ou’ é exclusivo (XOR)).

Fiz a implementação do Modelo como abaixo (retirei as anotações do Hibernate p/ simplificar):

interface IPessoa {…}

interface IFornecedor extends IPessoa {…}

class X {
IFornecedor fornecedor;

}

class Pessoa implements IPessoa {…}

class PessoaFisica extends Pessoa {…}

class PessoaJuridica extends Pessoa {…}

class FornecedorPessoaFisica extends PessoaFisica implements IFornecedor {…}

class FornecedorPessoaJuridica extends PessoaJuridica implements IFornecedor {…}


Dúvidas:

O modelo está bom? Sugestões, críticas, dicas, design patterns?

Caso esteja OK, dá para fazer a persistência desse modelo sem problemas? A dúvida é como fazer isso, já que IFornecedor é uma Interface, e não uma classe concreta. No manual “hibernate_annotations.pdf” (http://www.hibernate.org/hib_docs/annotations/reference/en/pdf/hibernate_annotations.pdf), página 12, Cap.: 2.2.4. tem dizendo: “Annotating interfaces is currently not supported.” :frowning:

Por exemplo, quero persistir um FornecedorPessoaFisica / FornecedorPessoaJuridica e usar "select f from IFornecedor f where … " para me retornar o FornecedorPessoaFisica / FornecedorPessoaJuridica correspondente…

1 -Retire o I da frente do nome das suas interfaces. Uma interface deve representar algo no domínio, se você não consegue pensar num nome para ela talvez esta não seja adequada.
2 - Qual a diferença entre pessoa jurídica e física no seu sistema? Será que elas realmente são classes separadas ou será que você possui apenas um tipo com atributos que variam?
3 - Porque fornecedor estende pessoa? Porque nao fornecedor esta ligado com um objeto pessoa?