Bom dia fdiaz2011,
Então, essa parte já saquei como funciona, a dúvida ficou quanto a teoria mesmo.
Vou tentar explicar por partes, acho que atropelei muita coisa no post anterior:
Esse relacionamento entre Pedido e Cliente, onde eu tenho um objeto Cliente dentro da classe pedido, funciona pro seguinte: inserir o id do cliente na tabela pedido, e retornar os detalhes do cliente caso eu busque um pedido pelo seu id, correto? Essa busca pelo id do pedido, eu precisaria mostrar na view os dados do cliente, então eu usaria expression language como seguinte: pedido.cliente.id, pedido.cliente.nome, etc.
Porém, caso eu não precisasse desta busca pelo id do pedido, eu só precisaria do id do cliente pra inserção no banco. Nisso eu poderia deixar a classe pedido sem o objeto cliente, apenas com o id do cliente no lugar dele:
@Entity
public class Pedido {
@Id
@GeneratedValue
@Column(name="id_pedido")
private Long id;
private Long idCliente; // em vez de private Cliente cliente;
@OneToMany
@JoinTable(name = "pedido_produto", joinColumns = @JoinColumn(name = "id_pedido"), inverseJoinColumns = @JoinColumn(name= "id_produto"))
private List<Produto> produtos;
}
A dúvida é: nesse caso, como cobriria minha necessidade, estaria mal modelada essa classe (trocar o objeto Cliente pelo Long idCliente)? Isso é gambiarra, ou uma má prática de programação na Orientação a Objetos ou a correta forma de utilizar hibernate? Eu não sou nenhum expert em OO (longe disso, tenho muito o que aprender ainda), mas não me parece nenhuma gambiarra deixar a classe Pedido como está logo acima do ponto de vista de Orientação a Objetos - nesse caso específico, em que só preciso da classe Pedido para persistir - salvar no banco - sem nenhuma consulta.
Caso eu tenha me perdido na explicação novamente, é só informar o que não expliquei bem.
Um grande abraço e novamente muito obrigado pela ajuda.