Mam pytanie o sposób aktualizacji danych w hibernate. Wyświetlam dane zaciągnięte z tabeli w JTable, działa ok. Jednak dane są pobierane w tranzakcji tylko przy otwieranu okna. następnie tranzakcja jest zamykana. Problem polega na tym że zmieniło się założenie programu i na danych może pracować więcej niz jedna osoba jednocześnie. Gdy dane osoba zaktualizuje dany wiersz kolejny pracownik widzi nadal stare dane. Jak najprościej wymusić aby w JTable były zawsze aktualne dane?
Przykład moich danych:
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="POJO.slownik")
@Table(name = "SLOWNIKI")
public class Slownik implements Serializable{
@Id
@Column(name = "ID")
@SequenceGenerator(name="PK",sequenceName="SLOWNIKI_SEQ", allocationSize=1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="PK")
private int id;
@Version
@Column(name = "WERSJA")
private int wersja;
@Column(name = "TYP")
private String typ;
@Column(name = "OPIS")
private String opis;
@Column(name = "AKTYWNY")
private boolean aktywny;
public Slownik() {
}
.
.
.}</code
```java
public static List getQuery(String query) throws IOException{
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx=null;
List resultList = null;
try{
tx=session.beginTransaction();
Query q = session.createQuery(query);
resultList = q.list();
tx.commit();
}
catch (Exception e) {if (tx!=null) tx.rollback();e.printStackTrace();Log.setLog(e.toString());}
finally {session.close();}
return resultList;
}
Wyświetlenie:
private void refreshSlowniki() throws IOException{
List resultList = DAO.GlobalDOA.getQuery("from Slownik order by id desc");
displaySlowniki(resultList);
}
private void displaySlowniki(List resultList) {
Vector<String> tableHeaders = new Vector<String>();
Vector tableData = new Vector();
tableHeaders.add("ID:");
tableHeaders.add("Typ:");
tableHeaders.add("Opis:");
tableHeaders.add("Aktywny:");
for(Object o : resultList) {
Slownik actor = (Slownik)o;
Vector<Object> oneRow = new Vector<Object>();
oneRow.add(actor.getId());
oneRow.add(actor.getTyp());
oneRow.add(actor.getOpis());
oneRow.add(actor.isAktywny());
tableData.add(oneRow);
}
slownikiTable.setModel(new javax.swing.table.DefaultTableModel(tableData,tableHeaders) {
Class[] types = new Class [] {
java.lang.Integer.class,
java.lang.String.class,
java.lang.String.class,
java.lang.Boolean.class,
};
public Class getColumnClass(int columnIndex) {return types [columnIndex];}
boolean[] canEdit = new boolean[]{false,false,false,false};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];}
});
}
Używam oracla, może cos takiego:
public interface oracle.jdbc.dcn.DatabaseChangeListener
extends java.util.EventListener {
void onDatabaseChangeNotification(oracle.jdbc.dcn.DatabaseChangeEvent arg0);
}
Wszystkie sugestie mile widziane.