Galera, é o seguinte estou com uma classe cliente:
@Entity@Table(name="clientes")publicclassClienteimplementsSerializable{@Id@GeneratedValueprivateLongid;privatebooleanjuridica;privateStringnomeOuRazaoSocial;privateStringnomeFantasia;privateStringcpfOuCnpj;privateStringrgOuInscricaoEstadual;@Temporal(TemporalType.DATE)privateDateTimedataNacimentoOuCriacaoEmpresa;@Temporal(TemporalType.DATE)privateDateTimedataAdesao;privateDoublelimite;privateDoublesaldo;@OneToOne(cascade=CascadeType.ALL)privateEnderecoendereco;@OneToOne(cascade=CascadeType.ALL)privateDadosBancariosdadosBancarios;@OneToOne(mappedBy="comprador")privateCompracompra;@OneToOne(mappedBy="vendedor")privateCompravenda;//getters e setters
e uma classe venda:
@Entity@Table(name="compras")publicclassCompraimplementsSerializable{@Id@GeneratedValueprivateLongid;privateStringtoken;privateDoublevalorDaCompra;privateDoublevalorPago;privateDateTimedataDaCompra;privateDateTimehoraDaCompra;@OneToOne(cascade=CascadeType.ALL)privateClientecomprador;@OneToOne(cascade=CascadeType.ALL)privateClientevendedor;privateDateTimedataPagamento;@OneToMany(mappedBy="compras")@OrderBy("compra")privateList<Pagamento>pagamentos;//getters e setters
Minha dúvida é a seguinte:
a classe compra possui dois Clientes (comprador e vendedor) como faço esse mapeamento?
Sei que a classe compra terá duas composições de cliente, mas como faço em cliente?
São clientes do mesmo tipo? Eu creio que não, logo, a classe compra possui um Comprador e um Vendedor (Cliente seria, apenas, uma superclasse de ambos).
diogogama
drsmachado, vlw ae pela resposta…
Mas são clientes exatamente iguais.
Imagine que eu estou te vendendo uma parada hoje. Eu sou o vendedor e você o comprador, mas amanhã pode ser o inverso, sacou?
ou seja vai haver dois relacionamentos com a mesma tabela Compras vai ter um comprador (Cliente) e um vendedor (Cliente).
Se puder me dar uma luz agradeço.
fredericomaia10
Não acho que a modelagem esteja correta. Você mesmo disse que tem um Comprador e um Vendedor, se ambos podem ser clientes use composição ou herança e crie um tipo pra cada.
diogogama
Não entendi? Eu tenho dois clientes, vou usar herança só pra dar um nome diferente e chamar um de comprador e outro de vendedor? não me parece correto… A única questão é que um uma hora poderá ser vendedor e outra hora comprador, mas os dados são os mesmos.
diogogama
Vou tentar explicar melhor.
Imagine o mercado livre. A tabela de clientes dele não distingue comprador de vendedor. Todos são potenciais compradores e vendedores. É mais ou menos isso. o que vai mudar é na regra de negócio e não na tabela.
Quando for mapear uma compra, você vai ter um cliente comprador e um cliente vendedor.
Consegui explicar melhor?
drsmachado
diogogama:
Vou tentar explicar melhor.
Imagine o mercado livre. A tabela de clientes dele não distingue comprador de vendedor. Todos são potenciais compradores e vendedores. É mais ou menos isso. o que vai mudar é na regra de negócio e não na tabela.
Quando for mapear uma compra, você vai ter um cliente comprador e um cliente vendedor.
Consegui explicar melhor?
Como o fred disse, está errado.
No mínimo você tem dois atributos diferentes, de mesma classe, comprador e vendedor.
public class Compra{
private Cliente vendedor;
private Cliente comprador;
//Outros atributos
//Getters e setters
}
diogogama
Poxa, então vocês não leram minha dúvida???
Se olharem a classe Compra lá tem os dois atributos, minha dúvida foi o mapeamento, peço por favor que leiam minha primeira msg para poderem me ajudar, pois lá está feito da forma que falaram.
hvivox
Camarada,
Eles estão certos, faz assim:
cria a classe pai chamado pessoa
Pessoa terá classes filhas chamadas Comprador, Vendedor etc
Lá no teu banco de dados vc pode criar a tabela Pessoa de várias formas recomendo que vc crie apenas uma tabela chamada pessoa lá vc coloca um campo chamado tipo(0 - comprador, 1 - vendedor)
public class Compra implements Serializable {
@ManyToOne
private Cliente comprador;
@ManyToOne
private Cliente vendedor;
}
Se vai ter só uma entidade mesmo para representar os dois. É isso aí. Faltava trocar por @ManyToOne.
Agora, seguindo assim como é que você vai diferenciar quando é comprador e quando é vendedor? Nunca haverão haver regras diferentes para quando é um ou outro?
fredericomaia10
Outra coisa, como é que você validaria estes atributos? O.o