读书人

hibernate 怎么删除TableViewer中选中

发布时间: 2013-06-25 23:45:42 作者: rapoo

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层中来。。
[解决办法]

引用:
Quote: 引用:

Session session = HibernateSessionFactory.getSession(
"hibernate_derby.cfg.xml");
这句话没用,,底层的代码不要放到Action层中来。。



没用?不要放到Action层?不太理解啊~那该放哪?


有用到三层吗? 我看你数据库访问的代码,放在了Action层。。。。没有的话那先这样以后慢慢分层开发 ,体会其中的好处。
[解决办法]
引用:
哦~~这样啊,我菜鸟一个啦,谢谢指点!是在Action的run方法中放一个delete方法,这样比较好,是吧?
不是,那不一样吗???都是耦合在了一个Action类中,程序得不到扩展,,你可以看看三层开发。。

读书人网 >Java相关

热点推荐