hibernate 如何删除TableViewer中选中的记录?
这是主要代码:(BuyMed就是那个对象)
private class DeleteAction extends Action {
IStructuredSelection selection = (IStructuredSelection)tableViewer.getSelection();
BuyMed buyMed = (BuyMed)selection.getFirstElement();
public DeleteAction() {setText("删除");}
public void run() {
if(buyMed == null) return;
if(MessageDialog.openConfirm(null, null, "确定要删除吗?")) {
if(deleteData()) {
tableViewer.remove(buyMed);
List<?> list = (ArrayList<?>)tableViewer.getInput();
list.remove(buyMed);
}else {
MessageDialog.openConfirm(null, null, "删除失败!");
}
}
}
private boolean deleteData() {
try {
Session session = HibernateSessionFactory.getSession(
"hibernate_derby.cfg.xml");
Transaction tx = session.beginTransaction();
Iterator<?> data = ((List<?>)tableViewer.getInput()).iterator();
if(data.hasNext()) {
buyMed = (BuyMed)data.next();
session.delete(buyMed);
....
tx.commit();
HibernateSessionFactory.closeSession();
}
}
.....
我想的逻辑就是这样(不知道对不对),运行的时候是可以删除对象,但是删除的却是最先插入的那条记录(先插入的先被删),而不是我想删除的,选中的那条记录。
所以我想请教,如何才能达到我想要的效果?哪里不对了,该怎么改?谢谢~~ Hibernate session
[解决办法]
你上面那个类,获取的selection永远是你创建该类实例的时候获得的,。你需要的是删除选中后的纪录,但是run方法没有重新获取selection。
[解决办法]
Session session = HibernateSessionFactory.getSession(
"hibernate_derby.cfg.xml");
这句话没用,,底层的代码不要放到Action层中来。。
[解决办法]
哦~~这样啊,我菜鸟一个啦,谢谢指点!是在Action的run方法中放一个delete方法,这样比较好,是吧?