Olá pessoal.
Tenho o seguinte:
Quando abro minha janela de listagem de aluno, tenho um botão para excluir do banco atraves da lista.
no meu botao tenho o seguinte método:
int linha = jTable1.getSelectedRow();
Aluno aluno = ((ListarAlunos) jTable1.getModel()).getObject(linha);
if (aluno != null) {
AlunoDAO.fabricaAlunoDAO().remover(aluno);
}
preencherTabela();
Esse é o metodo de preencher a tabela (Chamo ele lá no initcomponets):
private void preencherTabela() {
jTable1.setModel(new ListarAlunos(AlunoDAO.fabricaAlunoDAO().findAll()));
}
A ListarAlunos refere-se a uma classe que extende a AbstractTableModel:
package Visao;
import Dominio.Aluno;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class ListarAlunos extends AbstractTableModel{
private List<Aluno> alunos;
private static final String[] col = {"Código","Nome","Matrícula"};
public ListarAlunos(List<Aluno> alunos){
this.alunos = alunos;
fireTableStructureChanged();
}
@Override
public int getRowCount() {
return alunos.size();
}
@Override
public int getColumnCount() {
return col.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Aluno aluno = alunos.get(rowIndex);
Object dado = null;
switch (columnIndex){
case 0:
dado = aluno.getCodUsuario();
break;
case 1:
dado = aluno.getNome();
break;
case 2:
dado = aluno.getMatricula();
break;
}
return dado;
}
@Override
public void setValueAt(Object value, int row, int col) {
Aluno aluno = alunos.get(row);
switch (col){
case 0:
aluno.setCodUsuario((Integer) value);
break;
case 1:
aluno.setNome((String) value);
break;
case 2:
aluno.setMatricula((Integer) value);
break;
}
fireTableCellUpdated(row, col);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex){
/* Aqui voce indica qual coluna vai ser editável ou não,
Abaixo, somente a primeira coluna não é editável */
return false;
}
@Override
public Class getColumnClass(int column){
// Aqui voce indica qual tipo de dado é retornado nas colunas
switch (column){
case 0:
return Integer.class;
case 1:
return String.class;
case 2:
return Integer.class;
}
return Object.class;
}
public List<Aluno> getDataSet(){
// Aqui voce retorna todo o conjunto de dados
return alunos;
}
@Override
public String getColumnName(int column){
// Aqui define os nomes da colunas
return col[column];
}
public Object[] getRow(int row) {
// Aqui voce retorna um linha de registro inteira.
return new Object[]{alunos.get(row).getCodUsuario(),
alunos.get(row).getNome(),
alunos.get(row).getMatricula()};
}
public void removeRow(int row) {
// Aqui voce remove uma linha específica
alunos.remove(row);
fireTableDataChanged();
}
public void addRow(Object[] row) {
// Aqui voce acrescenta uma linha com um conjunto de registros específico
fireTableDataChanged();
}
public void addEmptyRow(){
// Aqui voce acrescenta uma linha em branco
fireTableDataChanged();
}
public Aluno getObject(int linha){
return alunos.get(linha);
}
}
Quando executo a exclusão dá o seguinte erro:
[color=red] Illegal attempt to associate a collection with two open sessions [/color]
Não estou conseguindo visualizar essas sessões abertas!!

