Bem pessoal, sou iniciante ainda no hibernate, entoa nao sei se essa é a melhor maneira. Ate perguntei isso aqui ja, mas o que o amigo disse nao me serviu, entao fui eu mesmo inventar...
Bem, eu aprendi a pegar os dados do hibernate em List. Porem, isso pra mim nao serve. Vou dizer porque.
1 - Software sera interligado pela internet, entao puxar uma lista inteira nao é legal, ainda mais que os dados ficariam cada um de uma maneira. E me falaram sobre usar @Version (ainda nao aprendi a usar anotation tambem..), mas pelo o que me disseram, se um usuario modifica algo no db, a versao muda e o outro nao consegue mais gravar, entao tem que pegar o List inteiro novamente. Isso seria ainda pior hehe
2 - Usar List para pegar os dados é muito ruim, alem desse motivo da internet e tambem porque sobrecarrega muito o computador, muito espaço perdido a toa, porque as vezes a pessoa nao vai utilizar tudo o que tem na List. Por exemplo, sobre ir pro primeiro registro, proximo registro, registro anterior, e ultimo, eu preciso carregar a List inteira, entao isso ja nao serviria tambem, porque as vezes a pessoa nem vai ver muita coisa..
Entao o que eu fiz, reinventei minha propria roda. Nao sei se foi a melhor maneira, se existe algo ja feito parecido com isso. Mas veja so no codigo abaixo:
Estou usando esse metodo para listar o conteudo:
public void atualizarDados() {
try {
List<String> listIdInicial = SessionDataBase.getSession().createSQLQuery("SELECT codigo FROM tb01 order by codigo asc limit 1").list();
int idInicial = Integer.parseInt(listIdInicial.get(0));
this.idInicial = idInicial;
List<String> listIdFinal = SessionDataBase.getSession().createSQLQuery("SELECT codigo FROM tb01 order by codigo desc limit 1").list();
int idFinal = Integer.parseInt(listIdFinal.get(0));
this.idFinal = idFinal;
BeanCadastrarProduto cadastrarProduto = (BeanCadastrarProduto) SessionDataBase.getSession().get(BeanCadastrarProduto.class, String.valueOf(idAtual));
txt_Codigo.setText(cadastrarProduto.getCodigo());
txt_DescricaoProduto.setText(cadastrarProduto.getDescricaoProduto());
txt_DescricaoAbreviada.setText(cadastrarProduto.getDescricaoAbreviada());
box_Unidade.setSelectedItem(cadastrarProduto.getUnidade());
box_SituacaoProduto.setSelectedIndex(cadastrarProduto.getSituacao() - 1);
box_TipoVenda.setSelectedItem(cadastrarProduto.getTipo() - 1);
txt_Marca.setText(cadastrarProduto.getMarca());
txt_Tamanho.setText(cadastrarProduto.getTamanho());
txt_Peso.setText(cadastrarProduto.getPeso());
txt_Cor.setText(cadastrarProduto.getCor());
txt_Grupo.setText(String.valueOf(cadastrarProduto.getGrupo()));
txt_Subgrupo.setText(String.valueOf(cadastrarProduto.getSubgrupo()));
box_DepartamentoFiscal.setSelectedIndex(cadastrarProduto.getDepartamentoFiscal() - 1);
txt_PorcentagemIVA.setText(String.valueOf(cadastrarProduto.getPorcentagemIVA()));
box_PIS.setSelectedItem(cadastrarProduto.getPIS());
box_COFINS.setSelectedItem(cadastrarProduto.getCOFINS());
txt_ComissaoVendedor.setText(String.valueOf(cadastrarProduto.getComissao()));
txt_DescontoMaximoItem.setText(String.valueOf(cadastrarProduto.getDescontoMaximo()));
ftxt_PrazoValidade.setText(cadastrarProduto.getPrazoValidade());
txt_PrazoGarantia.setText(cadastrarProduto.getPrazoGarantia());
txt_LocalFisico.setText(cadastrarProduto.getLocalFisico());
ftxt_DataCadastro.setText(cadastrarProduto.getDataCadastro());
ftxt_DataSaiudeCirculacao.setText(cadastrarProduto.getDataSaiuDeCirculacao());
ftxt_DataUltimaAlteracao.setText(cadastrarProduto.getDataUltimaAlteracao());
txt_UsuarioUltimaAlteracao.setText(cadastrarProduto.getUsuarioUltimaAlteracao());
if (cadastrarProduto.getProdutoPesado() == 0) {
cbox_ProdutoPesado.setSelected(false);
} else {
cbox_ProdutoPesado.setSelected(true);
}
if (cadastrarProduto.getAceitaCondicional() == 0) {
cbox_AceitaCondicional.setSelected(false);
} else {
cbox_AceitaCondicional.setSelected(true);
}
if (cadastrarProduto.getSairTabelaPreco() == 0) {
cbox_SairPesquisaProdutos.setSelected(false);
} else {
cbox_SairPesquisaProdutos.setSelected(true);
}
//Precisa disso caso for atualizado em um terminal, no outro tambem é
SessionDataBase.getSession().clear();
cadastrarProduto = null;
//SessionDataBase.getSession().getTransaction().begin();
//SessionDataBase.getSession().getTransaction().commit();
idExiste = true;
} catch (java.lang.IndexOutOfBoundsException ex) {
desativarCampos();
idExiste = true;
} catch (java.lang.NullPointerException ex){
idExiste = false;
}
}
Veja que nele, eu defino o idInicial e idFinal para percorrer. Porque isso, porque no db vai ter um campo id que sera criado a cada registro salvo.
E nos botoes primeiro, anterior,proximo,ultimo eu tenho o seguinte:
private void btn_PrimeiroActionPerformed(java.awt.event.ActionEvent evt) {
idAtual = idInicial;
atualizarDados();
txt_Codigo.setEnabled(false);
}
private void btn_ProximoActionPerformed(java.awt.event.ActionEvent evt) {
if (idAtual != idFinal) {
boolean teste = true;
while(teste){
idAtual++;
atualizarDados();
if(idExiste){
teste = false;
}
}
}
txt_Codigo.setEnabled(false);
}
private void btn_UltimoActionPerformed(java.awt.event.ActionEvent evt) {
try {
idAtual = idFinal;
atualizarDados();
} catch (java.lang.IndexOutOfBoundsException ex) {
idAtual = idInicial;
}
txt_Codigo.setEnabled(false);
}
private void btn_AnteriorActionPerformed(java.awt.event.ActionEvent evt) {
if (idAtual != idInicial) {
boolean teste = true;
while(teste){
idAtual--;
atualizarDados();
if(idExiste){
teste = false;
}
}
}
txt_Codigo.setEnabled(false);
}
Entao tipo, estou conseguindo percorrer meu banco normal.
Porem, gostaria de saber se essa é a melhor maneira de fazer isso, pensando sempre que o sistema sera usado pela internet, entao os dados devem ir um por vez, ao inves de mais.
Outra coisa tambem, acredito que seja erro de logica, ate porque estou pegando os dados da instancia do Bean. Gostaria de saber o porque se eu tirar a linha 'cadastrarProduto = null;' la do metodo atualizar, porque mesmo excluindo o registro ele ainda continua passando por ele?
Por enquanto isso galera, se alguem poder me ajudar, ficarei muito grato!
Abraços