Se interface nao persiste como identifica-la em caso de poliformismo

Em resumo tenho:

interface Persistable //segui a dica do sergiotaborda
getID() : Object
setID(Object obj);

class ClientePessoas extends Pessoa implements Cliente , Persistable
class ClienteEmpresa extends Empresa implements Cliente , Persistable

class CientePessoas
ID …
Double QualMeuDesconto

class CienteEmpresa
ID …
Double QualMeuDesconto //aqui é uma formula difente por isso o usa do poliformismo mais abaixo

Pessoa
ID …
double indicePotencialCliente

a interface Cliente nao tem ID pois nao persiste, porem ClientePessoa tem pois é persistivel.

modelagem a parte minha pergunta é:

class AlgumaOpercao
Cliente cliente
int Cliente_ID //atributo mapeado
FazerOperacaPara(Cliente cliente)

essa classe acima faz aguma coisa para cliente, mas para ela nao importa se é ClienteEmpresa ou ClientePessoa.

tb toh usando a dica do sergiotaborda http://www.guj.com.br/posts/list/69322.java tenho

Cliente cliente = ClienteRepository.findByID(345);
//dai vou passar o cliente para AlgumaOpercao, porem no metodoFazerOperacaPara
FazerOperacaPara(cliente);
//dentro desse metodo como classe FazerOperacaPara vai saber o ID do Cliente? para poder passar para o cliente_ID

private void FazerOperacaPara(Cliente cliente)
{
this.cliente = cliente;
this.cliente_ID = cliente.ID //mas Cliente a interface nao tem ID. e agora tb nao me interessa mais se é ClientePessoa ou ClienteEmpresa
}

nao estou duplicando topico, mas se alguem quiser ver http://www.guj.com.br/posts/list/69322.java a duvida é diferente, e se alguem quiser ver esse outro topico eu tb ficaria agradecido.

Agradeço desde ja.

1)Porquê vc precisa acessar o ID da interface Cliente ? Vc precisa mesmo?
2)Se realmente precisa isso não significaria que o ID é uma caracteristica de Cliente ?
3) E nesses caso não teria Cliente que ser persistente ?

Repare, o problema é que vc quer destinguir uns clientes dos outros por um único atributo da classe.
Isto significa que cada objeto cliente é diferente do outro se esse atributo é diferente e é igual apenas se o atributo for igual. Isto significa que esse atributo caracteriza o objeto univocamente em qualquer camada da sua aplicação, inclusive na persistência.

Enfim, basta que Cliente seja Persistivel para que tudo dê certo.

[quote=sergiotaborda]1)Porquê vc precisa acessar o ID da interface Cliente ? Vc precisa mesmo?
2)Se realmente precisa isso não significaria que o ID é uma caracteristica de Cliente ?
3) E nesses caso não teria Cliente que ser persistente ?

Repare, o problema é que vc quer destinguir uns clientes dos outros por um único atributo da classe.
Isto significa que cada objeto cliente é diferente do outro se esse atributo é diferente e é igual apenas se o atributo for igual. Isto significa que esse atributo caracteriza o objeto univocamente em qualquer camada da sua aplicação, inclusive na persistência.

Enfim, basta que Cliente seja Persistivel para que tudo dê certo.[/quote]

  1. preciso para poder informar para classe AlgumaOpercao que tem um atributo cliente_id e esse é inofrmado no metodo FazerOperacaPara.
    Mas isso se resolve usando sua alternativa no topico http://www.guj.com.br/posts/list/69322.java
    Persistable p = (Persistable)cliente
    private void FazerOperacaPara(Cliente cliente)
    {
    this.cliente = cliente;
    Persistable p = (Persistable)cliente
    [color=red]this.cliente_ID = p.ID;[/color]}

[color=#444444][/color]

2)Eu pensei que como Cliente nao era concreto ele nao poderia usar ID que uma caracteristica da persistencia. Mas acho que com a opcao de Persistable p = (Persistable)cliente que vc me deu, consigo resolver.

3)Pois é, mesmo que com Persistable p = (Persistable)cliente se resolva o problema eu fico em duvida: posso persistir uma interface ou um obj abstrato, isso seria comum? ou seria uma opção tipo gambiarra? estou tentando fazer o mais adequado. Se eu tiver que refazer td novamente vou fazer para ficar o mais coerente.

Acho q o mais sençato seria, abstratir Cliente em uma classe. assim como vc comenta em http://www.guj.com.br/posts/list/69322.java. Inclusive nesse topico do mais informações sobre o objetivo dessas classes.

Muito obrigado mesmo.