Sistema de Vendas com Hibernte

Saudações!

Gostaria de uma ajuda dos senhores para saber de que forma eu poderia modelar um banco de dados em Postgresql, para um simples sistema de vendas. Minha dúvida é com relação ao fato do campo (VENDA_ID) ser autoincrement, onde para inserir os itens eu deveria primeiro salvar na tabela VENDAS, resgatar o valor de VENDA_ID, para que dessa forma, poder lançar os ITENS.
Qual a melhor forma de fazer este procedimento. Salvar na tabela VENDAS primeiro e resgatar o ID para lançar os itens ou gerar esse ID manualmente para utilizar no lançamento dos itens???

Se você vai usar o Hibernate, não precisa nem se preocupar com isso. Supondo que você modele sua classe da seguinte forma:

[code]@Entity
public class Venda {
@OneToMany
private Collection<Item> itens;

public void adicionarItem(Item item) {
    this.itens.add(item);
}

}[/code]Basta fazer:

vendas.adicionarItem(item);E persistir a entidade.

Entendi sua colocação.
Agora me ocorreu uma outra dúvida. Digamos que eu tenha uma sistema de vendas em que o caixa deverá fechar uma venda com 50 itens. Nesse caso, o hibernate faz algum cache físico do objeto VENDA, ou não. Minha preoculpação é que no final da venda, caso haja alguma falha de Rede ou de Energia, tudo que foi lançado seja perdido, uma vez que so deverá ser persistido no banco no fechamento da venda.

Nunca passei por essa situação, então talvez minha sugestão não seja a mais adequada. Mas você pode criar um atributo na sua classe venda que represente seu estado: pendente, confirmada, estornada, etc. Assim o usuário pode gravar os dados da venda, mas ela continua pendente; depois de inserir uns 50 itens ele pode clicar em algum botão na interface que a confirme. mudando seu estado para confirmada. Caso ocorra algum problema, a venda não foi confirmada mas pelo menos ela está no banco.