首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

写了一个删除的数据的小例子(struts2+hibernate)有时会出错,搞不明白,求真相,该如何解决

2012-04-13 
写了一个删除的数据的小例子(struts2+hibernate)有时会出错,搞不明白,求真相当我删除的时候有时候会出错,

写了一个删除的数据的小例子(struts2+hibernate)有时会出错,搞不明白,求真相
当我删除的时候有时候会出错,刷新一下以后又有可能会好,搞不明白,求真相!

这是MyEclipse导出的本例子外链下载地址:http://dl.dbank.com/c0jumq5ax6

1、先向数据库插入数据

Java code
public class InsertData {    public static void main(String[] args){        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        session.beginTransaction();        for(int i = 0; i<10; i++){            Person person = new Person();            person.setName("Test Name " + i);            person.setAddress("Test address " + i);            session.save(person);        }        session.getTransaction().commit();    }}


2、读取数据
Java code
public class ShowData extends ActionSupport{    private List<Person> persones = new ArrayList<Person>();        public List<Person> getPersones() {        return persones;    }    public void setPersones(List<Person> persones) {        this.persones = persones;    }    public String execute()throws Exception{        //从数据库读取数据        String hql = "from Person";        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        session.beginTransaction();        Query query = session.createQuery(hql);        this.setPersones((List<Person>)query.list());                session.getTransaction().commit();        return SUCCESS;    }}


3、跳转并显示
HTML code
<body>  <s:debug/>  <table>           <s:iterator value="persones" id="person">               <tr>                   <td><s:property value="#person.name"/></td>                   <td><s:property value="#person.address"/></td>                   <td><a href="deletePerson?id=<s:property value="#person.id"/>">删除</a></td>               </tr>           </s:iterator>   </table>  </body>


4、通过ID来删除
Java code
public class DeleteUtil extends ActionSupport{    private Integer id;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }        public String execute()throws Exception{        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        session.beginTransaction();        Person person = (Person)session.get(Person.class, this.getId());        session.delete(person);        session.getTransaction().commit();        return SUCCESS;    }}


5、调用完以后跳回到showData
XML code
<package name="default" namespace="/" extends="struts-default">         <action name="showData" class="com.myTest.ShowData">             <result>/ShowData.jsp</result>         </action>                  <action name="deletePerson" class="com.myTest.DeleteUtil">             <result type="redirectAction">                 <param name="actionName">showData</param>                 <param name="namespace">/</param>             </result>         </action>     </package>


6、这是hibernate文档中的那个帮助类
Java code
 

public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; }}



7、Person只有这3个属性
Java code
public class Person {    private Integer id;    private String name;    private String address;




[解决办法]
你给这个谁知道啊 !自己慢慢跟断点调试吧!
[解决办法]
会不会是,person查询出来,有时候为空。而导致去删除一个空对象。从而报错。
[解决办法]
redirectAction这个会丢失数据哦,就是servlet中的sendRedirect一样,改成dispatcher
[解决办法]
不要意思,看错了- -!
[解决办法]
改成 chain
[解决办法]
把事务修改下看看。
Java code
 Transaction tx=session.beginTransaction();.......tx.commit(); 

热点排行