Hibernate的数据删除,更改
其他未給出代碼,請(qǐng)參考上一篇....
一.數(shù)據(jù)的刪除
方法1.從“多”的一方進(jìn)行數(shù)據(jù)的刪除
books.hbm.xml文件不變:
<many-to-one name="publishers" column="publisherId" class="com.entry.Publishers" lazy="false"cascade="save-update"/>publishers.hbm.xml文件:
<set name="books" lazy="false" cascade="all" inverse="true"> <!-- cascade="save-update" 也可以 --><key column="publisherId" not-null="true"/><one-to-many class="com.entry.Books"/></set>在MyHibernateDao.java中添加如下代碼:
public Books getBook(int Id){Books book = null;Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();book = (Books)session.get(Books.class, new Integer(Id));tran.commit();return book;}public void deleteBook(Books book){Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();session.delete(book);tran.commit();}在HibernateServlet.java中添加如下代碼
Books book1 = dao.getBook(3);book1.getPublishers().getBooks().remove(book1);book1.setPublishers(null);dao.deleteBook(book1);注意如果沒有book1.getPublishers().getBooks().remove(book1);?book1.setPublishers(null);這兩句,會(huì)出現(xiàn)?org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)這個(gè)異常,主要是因?yàn)锽ooks和Publishers二者的級(jí)聯(lián)關(guān)系。
所以我們可以先將級(jí)聯(lián)斷開,然后再進(jìn)行刪除“多”的一方。
方法2.從“一”的這一方進(jìn)行刪除,這樣的話就是和“一”這一方相關(guān)聯(lián)的“多”的一方都會(huì)被刪除
在HibernateServlet.java中添加如下代碼:
Publishers publisher = dao.getPublisher(1); dao.deletePublisher(publisher);publishers.hbm.xml 和?books.hbm.xml 不用改變
在MyHibernateDao.java中添加如下代碼:
public Publishers getPublisher(int Id){Publishers publisher = null;Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();publisher = (Publishers)session.get(Publishers.class, new Integer(Id));tran.commit();return publisher;}public void deletePublisher(Publishers publisher){Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();session.delete(publisher);tran.commit();}?二.數(shù)據(jù)的刪除
在MyHibernateDao.java中添加如下代碼:
public void updateBooks(Books book){Session session = HibernateSessionFactory.getSession();Transaction tran = session.beginTransaction();session.update(book);tran.commit();}在HibernateServlet.java中添加如下代碼
//更改數(shù)據(jù), 更改對(duì)應(yīng)的外鍵Books book1 = dao.getBook(79);//將book1的publisherId替換成46/較為安全的寫法,然而并不知道有什么卵用Publishers px = dao.getPublisher(book1.getPublishers().getPublisherId());px.getBooks().remove(book1);Publishers py = dao.getPublisher(46);py.getBooks().add(book1);/ book1.setPublishers(py);dao.updateBooks(book1);//更改數(shù)據(jù),BooksBooks book2 = dao.getBook(79);book2.setTitle("如何成為成功的人士");dao.updateBooks(book2);其他不變....
轉(zhuǎn)載于:https://www.cnblogs.com/hujunzheng/p/4620968.html
總結(jié)
以上是生活随笔為你收集整理的Hibernate的数据删除,更改的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 捷信分期上征信吗
- 下一篇: 经济师证书含金量如何?哪些人需要考?