Witam.
Mam taki fragment kodu

import java.awt.BorderLayout;


public class GUI extends JFrame implements Serializable, ListSelectionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private final static SessionFactory factory;
	static {
		Configuration cfg = new Configuration().configure();
		factory = cfg.buildSessionFactory();
	}
	private JFrame frame;
	private JTable table;
	private JTree  tree;
	private EditBeneficjent dialog;
	private DefaultMutableTreeNode node_1;
	private DefaultMutableTreeNode node_2;
	private DefaultMutableTreeNode node_3;
	private DefaultMutableTreeNode node_4;
	private Object nodeInfo;
	private Beneficjent beneficjent;
	
	public GUI(){
		  try {
				UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (InstantiationException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IllegalAccessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (UnsupportedLookAndFeelException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		frame = new JFrame();
		frame.setBounds(100, 100, 1151, 520);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JToolBar toolBar = new JToolBar();
		toolBar.setEnabled(false);
		frame.getContentPane().add(toolBar, BorderLayout.NORTH);
		
		JButton btnNewButton = new JButton("Dodaj");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		toolBar.add(btnNewButton);
		
		JButton btnEdytuj = new JButton("Edytuj");
		btnEdytuj.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (nodeInfo.toString()=="Beneficjenci" ){
					try {
			    		if (dialog==null)
			    		{
						dialog = new EditBeneficjent(beneficjent);
			    		}
			    		dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
					    dialog.setVisible(true);			    		
					} catch (Exception f) {
						f.printStackTrace();
					}
				}
			}
		});
		toolBar.add(btnEdytuj);
		
		JButton btnNewButton_1 = new JButton("Usu\u0144");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			}
		});
		btnNewButton_1.setForeground(Color.RED);
		toolBar.add(btnNewButton_1);
		
		JSplitPane splitPane = new JSplitPane();
		frame.getContentPane().add(splitPane, BorderLayout.CENTER);	
		table = new JTable(ladowaniaTabeli());
		table.getSelectionModel().addListSelectionListener(this);		
		JScrollPane pane = new JScrollPane(table);		
		splitPane.setRightComponent(pane);
		
		final ArrayList<String> beneficjent = new ArrayList<String>();
		  beneficjent.add("BENEFICJENT");
		  beneficjent.add("Beneficjenci");
		  beneficjent.add("Komputery");
		  beneficjent.add("Drukarki");
		  beneficjent.add("Hasła");
		  beneficjent.add("Połączenia");
		  
		
		  
		
		
		tree = new JTree();  
		DefaultMutableTreeNode obj = new DefaultMutableTreeNode("START"){
			{
			
			node_1 = new DefaultMutableTreeNode(beneficjent.get(0));
			for(int i=1;i<beneficjent.size();i++){
				node_1.add(new DefaultMutableTreeNode(beneficjent.get(i)));
			}
			add(node_1);
			
			node_2 = new DefaultMutableTreeNode(serwis.get(0));
			for(int i=1;i<serwis.size();i++){
				node_2.add(new DefaultMutableTreeNode(serwis.get(i)));
			}
			add(node_2);
			
			node_3 = new DefaultMutableTreeNode(dokument.get(0));
			for(int i=1;i<dokument.size();i++){
				node_3.add(new DefaultMutableTreeNode(dokument.get(i)));
			}
			add(node_3);
			
			node_4 = new DefaultMutableTreeNode(administracja.get(0));
			for(int i=1;i<administracja.size();i++){
				node_4.add(new DefaultMutableTreeNode(administracja.get(i)));
			}
			add(node_4);
			
			}
			
		  };
		tree.setModel(new DefaultTreeModel(obj));
		tree.addTreeSelectionListener(listener());
		
		splitPane.setLeftComponent(tree);
			
		JMenuBar menuBar = new JMenuBar();
		frame.setJMenuBar(menuBar);
		
		JMenu mnNewMenu = new JMenu("New menu");
		menuBar.add(mnNewMenu);
		
		JMenuItem mnNewMenu_1 = new JMenuItem("New menu1");
		mnNewMenu.add(mnNewMenu_1);
		
		JMenu mnTest = new JMenu("Test");
		menuBar.add(mnTest);
		frame.setVisible(true);
	}

	TreeSelectionListener listener() {
		  TreeSelectionListener objTreeListener = new TreeSelectionListener() {

		   @Override
		   public void valueChanged(TreeSelectionEvent e) {
		    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
		    nodeInfo = node.getUserObject();
		    switch(nodeInfo.toString()){
		    case "Beneficjenci":  
		    	System.out.println("Beneficjent");
		    	break;
		   
		    }
		   }
		  };
		  return objTreeListener;
	}
		
	public BeneficjentModel ladowaniaTabeli(){
	  	Session session = factory.openSession();
		Transaction tx = session.beginTransaction();
		Criteria criteria = session.createCriteria(Beneficjent.class);
		List<Beneficjent> sysinfo = criteria.list();
		BeneficjentModel km = new BeneficjentModel();
		List<Beneficjent>listaDoModelu  = new LinkedList<Beneficjent>();
		for (Iterator<Beneficjent> it = sysinfo.iterator(); it.hasNext();){
			Beneficjent sysi = (Beneficjent) it.next();
			System.out.println("Ladowanie do tabeli : "+sysi.getImie());
			listaDoModelu.add(sysi);
		}	
		km.setData(listaDoModelu);
		km.fireTableDataChanged();
		tx.commit();
		session.close();
		return km;
	}
	public Beneficjent getBeneficjentID(int ID){
		Beneficjent tmpBeneficjent = new Beneficjent();
		Session session = factory.openSession();
		Transaction tx = session.beginTransaction();
		Criteria criteria = session.createCriteria(Beneficjent.class);
		criteria.add(Restrictions.idEq(ID));
		List<Beneficjent> lista = criteria.list();
		for (Iterator<Beneficjent> it = lista.iterator(); it.hasNext();){
			tmpBeneficjent = (Beneficjent) it.next();
			
		}
		tx.commit();
		session.close();
		
		return tmpBeneficjent;
	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		// TODO Auto-generated method stub
		int first;	
		
		  first = table.getSelectedRow();
		  System.out.println("Table get SelectedRow: "+first);
		  first = table.convertRowIndexToModel(first);//konwertuje indexy z tabeli na indexy modelu, istotne przy wyszukiwaniu danych w tabeli lub sortowaniu.
		  System.out.println("ConverRowIndexToModel: "+first);
		  getBeneficjentID(first);
	}
	
}

problem pojawia sie tutaj:

@Override
	public void valueChanged(ListSelectionEvent e) {
		// TODO Auto-generated method stub
		int first;	
		
		  first = table.getSelectedRow();
		  System.out.println("Table get SelectedRow: "+first);
		  first = table.convertRowIndexToModel(first);//konwertuje indexy z tabeli na indexy modelu, istotne przy wyszukiwaniu danych w tabeli lub sortowaniu.
		  System.out.println("ConverRowIndexToModel: "+first);
		  getBeneficjentID(first);
	}
	

Testowo zrobiłem sobie taka metodę aby sprawdzić jak wygląda sprawa pobieranie ID z modelu.
I niestety obydwie metody get.SelectedRow i ConverRowIndexToModel dają taka samą wartość która nijak jest zgodna z tym co jest w tabeli. ( Tak jak by do wartość dodawane było + 3).
Bardzo prosiłbym bym o pomoc ponieważ trochę się z tym już mecze.
Model wygląda następująco.

import java.util.LinkedList;
import java.util.List;
import javax.swing.table.AbstractTableModel;


public class BeneficjentModel extends AbstractTableModel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public String[] colName={"ID","Imię","Nazwisko","Adres"};
	private List<Beneficjent> data = new LinkedList<Beneficjent>();
	
	public BeneficjentModel(){
		
	}
	
	public void setData(List<Beneficjent> listDoModelu){
		this.data=listDoModelu;
	}
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return data.size();
	}

	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return colName.length;
	}
	@Override
	public String getColumnName(int columnIndex){
		return colName[columnIndex].toString();
	}

	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		Beneficjent r = (Beneficjent) data.get(rowIndex);
		switch(columnIndex){
		case 0:
			return r.getId();
		case 1:
			return r.getImie();
		case 2:
			return r.getNazwisko();
		case 3:
			return r.getAdres();
		
		
		
		}
		return null;
	}

}