[quote=rogelgarcia][quote=TheKill]eita poha, ta me saindo mais facil lidar com SQL
SAHDIUAHSiduhAIUDHuiHDsui[/quote]
É por isso que no Next… essas funcionalidades todas aí… eu nao faço com o hibernate…
Dou um drop nele… para ele nao controlar NADA
E tenho classes que fazem isso dinamicamente… nao dá essa problematica toda…[/quote]
se vc precisar um dia, so atualizar os dados, vai ter q fazer algo como
[code]Objeto dadosNovos = objetoRecebidoParaAtualizar
target = session.load(Objeto.class,dadosNovos.getId());
target.setNome(novo.getNome());
target.setAltura(novo.getAltura());
//etc
//etc[/code]
[quote=Lavieri][quote=rogelgarcia]Lavieri Aproveitando a discussão aqui, uma opiniao sua…
Voce nao acha que é ruim vc definir como os dados devem ser persistidos e forma estática uma coisa ruim?!
Nao deveria ter uma forma de fazer isso programaticamente?!
Por exemplo, as vezes numa situacao vc iria querer um comportamento e em outra situacao outro comportamento… definindo isso de forma estática… vc só tem um comportamento para a aplicacao inteira…[/quote]
nao da pra fazer isso…
isso e’ o mesmo que vc falar que a tabela vai ficar mutavel.[/quote]
Nao nao… tipo… ao invés de definir estaticamente (com anotacoes)… que o hibernate deve tomar conta dos child (casacade…delete orphan essas coisas)
Tudo nao ser controlado pelo hibernate…
E quando vc for salvar vc escolhe
Tipo isso
[quote=Lavieri][quote=rogelgarcia][quote=TheKill]eita poha, ta me saindo mais facil lidar com SQL
SAHDIUAHSiduhAIUDHuiHDsui[/quote]
É por isso que no Next… essas funcionalidades todas aí… eu nao faço com o hibernate…
Dou um drop nele… para ele nao controlar NADA
E tenho classes que fazem isso dinamicamente… nao dá essa problematica toda…[/quote]
se vc precisar um dia, so atualizar os dados, vai ter q fazer algo como
[code]Objeto dadosNovos = objetoRecebidoParaAtualizar
target = session.load(Objeto.class,dadosNovos.getId());
target.setNome(novo.getNome());
target.setAltura(novo.getAltura());
//etc
//etc[/code][/quote]
Nao… o drop nao é tao grande assim… 
É só para ele nao controlar os childs e essas coisas…
Vou dar um exemplo de como é no Next só pra se ter uma ideia…
new SaveOrUpdateStrategy(venda)
.saveEntity()
.saveOrUpdateManaged("itensVenda") //isso aqui faz todo o trabalho necessário para atualizar os detalhes.. mas eu escolho se eu quero fazer ou nao.. no código... e nao com anotacoes
.execute(); //aqui será aberta uma transacao para realizar as operacoes
[quote=Lavieri][quote=TheKill]nao… eu estava reclamando é que…
se eu to fazendo um update de uma lista de itens venda… onde pode ser > 1
eu vou dar update em N produto… pode ser em todos ou não… ele nao apaga os registros que não foram atualizados…
mais ou menos isso…[/quote]
se vc colocar a anotacao que eu falei…
todos os itensDeVendas que nao estiverem dentro da lista, na hora do .marge() serao excluidos[/quote]
Eu fiz como vc citou das @anotation mas continua nao excluindo na tabela ItemVenda…
Mesmo eu listando apenas 1 item venda para ser atualizado… uma lista com 6 itens vendidos
@OneToMany(cascade=CascadeType.ALL, mappedBy="venda")
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name="cd_venda")
private List<ItemVenda> listaItemVenda
mostra o comando q vc esta fazendo
Venda v = new Venda();
VendaJdbc vj = new VendaJdbc();
Calendar calendar = Calendar.getInstance();
calendar.getTime();
try {
v = vj.consultar(1);
} catch (ExcessaoDAO e2) {
e2.printStackTrace();
}
List<ItemVenda> listItemVenda = new ArrayList<ItemVenda>();
ItemVenda iv = new ItemVenda();
Produto p = new Produto();
ProdutoJdbc pr = new ProdutoJdbc();
try {
p = pr.consultar(2);
} catch (ExcessaoDAO e1) {
e1.printStackTrace();
}
iv.setCodigo(1);
iv.setProduto(p);
iv.setVenda(v);
listItemVenda.add(iv);
iv.setProduto(p);
iv.setVenda(v);
listItemVenda.add(iv);
v.setListaItemVenda(listItemVenda);
vj = new VendaJdbc();
try {
vj.alterar(v);
} catch (ExcessaoDAO e) {
e.printStackTrace();
}
ps.: formatar codigo nesse code is impossible
iv.setCodigo(1);
iv.setProduto(p); //isso
iv.setVenda(v); // e isso
listItemVenda.add(iv); //#1
iv.setProduto(p); // esta repetido aki
iv.setVenda(v); // e aqui
listItemVenda.add(iv); // em #1 vc esta adiconando o mesmo objeto
v.setListaItemVenda(listItemVenda);
}
para ter 2 objetos vc precisa fazer apos o add um iv = new BalBalBla()
Sim sim… eu devo ter apagado sem querer…
mas o fato nao era esse…
o fato é que eu tenho 6 itens na table de itens vendas… mandei atualizar 1 ou 2
e ele manteve os 6 itens
bom vamos la, se quer realmente q te ajude, vai ter q me ajudar
v
iv
p
são coisas ilegiveis, fica horrivel de ver o codigo… use nomes descritivos, para que se possa entender
tenta isso aqui abaixo
[code]Produto produto = session.load(Produto.class,2);
Venda venda = new Venda();
venda.addItemVenda(produto).setId(1); //se isso aqui nao existe na sua classe é pq vc gosta de dificultar =P
venda.addItemVenda(produto).setId(2);
session.marge(venda);[/code]
so pra te ajudar, segue o codigo do addItemVenda
public class Venda {
//...
public ItemVenda addItemVenda(Produto produto){
ItemVenda itemVenda = new ItemVenda();
itemVenda.setVenda(this);
itemVenda.setProduto(produto);
this.getItensVenda().add(itemVenda); //obs.: se isso aqui der NPE, é pq vc não esta instanciado a lista corretamente
return itemVenda;
}
//...
}
tenta isso ai… e vê se não funciona
vou tentar simplificar o codigo pra ver se consegue entender…
beleza?
Desculpe pelo transtorno, estou tentando aprender sobre Hibernate…
e nao sei você, mas no inicio costumamos patinar até pegar a caida do negócio…
vou postar o código abaixo:
Venda venda = new Venda();
VendaJdbc vendaJdbc = new VendaJdbc();
Calendar calendar = Calendar.getInstance();
calendar.getTime();
try {
venda = vendaJdbc.consultar(1);
} catch (ExcessaoDAO e2) {
e2.printStackTrace();
}
List<ItemVenda> listItemVenda = new ArrayList<ItemVenda>();
ItemVenda itemVenda = new ItemVenda();
Produto produto = new Produto();
ProdutoJdbc produtoJdbc = new ProdutoJdbc();
try {
produto = produtoJdbc.consultar(2);
} catch (ExcessaoDAO e1) {
e1.printStackTrace();
}
itemVenda.setCodigo(1);
itemVenda.setProduto(produto);
itemVenda.setVenda(venda);
listItemVenda.add(itemVenda);
venda.setListaItemVenda(listItemVenda);
vendaJdbc = new VendaJdbc();
try {
vendaJdbc.alterar(venda);
} catch (ExcessaoDAO e) {
e.printStackTrace();
}
esplicando a situação acima do codigo…
venda = vendaJdbc.consultar(1);
//faz a consulta na tabela Venda e atribui o resultado ao objeto venda que é do tipo Venda;
produto = produtoJdbc.consultar(2);
//faz a consulta na tabela Produto e atribui o resultado ao objeto produto que é do tipo Produto;
itemVenda.setCodigo(1);
...
listItemVenda.add(itemVenda);
//adiciona 1 elemento para atualizar na tabela de ItemVenda;
venda.setListaItemVenda(listItemVenda);
//adiciona a lista de itens para ser atualizados na venda;
//e por fim
vendaJdbc.alterar(venda);
//manda atualizar a venda com o objeto venda;
quando vc faz isso
venda = vendaJdbc.consultar(1);
todas os itensvenda vem pendurado … pode ser isso
tente fazer da forma q te falei, e veja se funciona
até tentei fazer do que jeito que vc comentou,
mas nao tive muito sucesso hehe
vou postar as classes aqui em anexo…
ai se você puder olhar… agradeço muito…
e desculpe ficar enchendo de pedidos de ajuda ^^
ainda acho que vc não esta colando o código real aqui…
eu fiz aki, e deu certo, a casacata
vc ja deu uma olhada no codigo que eu postei??
cara desculpe mesmo, odeio ficar dependendo de outras pessoas, mas esse hibernate tá dando dor de cabeça hehe
valeu pelo grande help e paciência em tentar ajudar ^^
try it
http://pastebin.com/5GWqhnfc
http://pastebin.com/N7Vmjv99
http://pastebin.com/7XgNYAgD
dei umas leves alterações
mas falta o trecho da logica q vc esta executando