Hibernate的数据删除,更改
其他未给出代码,请参考上一篇....
一.数据的删除
方法1.从“多”的一方进行数据的删除
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);这两句,会出现 org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)这个异常,主要是因为Books和Publishers二者的级联关系。
所以我们可以先将级联断开,然后再进行删除“多”的一方。
方法2.从“一”的这一方进行删除,这样的话就是和“一”这一方相关联的“多”的一方都会被删除
在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();
}
二.数据的删除
在MyHibernateDao.java中添加如下代码:
public void updateBooks(Books book){
Session session = HibernateSessionFactory.getSession();
Transaction tran = session.beginTransaction();
session.update(book);
tran.commit();
}
在HibernateServlet.java中添加如下代码
//更改数据, 更改对应的外键
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); //更改数据,Books
Books book2 = dao.getBook(79);
book2.setTitle("如何成为成功的人士");
dao.updateBooks(book2);
其他不变....
Hibernate的数据删除,更改的更多相关文章
- Hibernate 插入,修改,删除,查询语句
/* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...
- Hibernate的数据查找,添加!
1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /*=============================================== ...
- python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...
- hibernate有关联关系删除子表时可能会报错,可以用个clear避免错误
//清除子表数据 public SalesSet removeSalesSetDistributor(SalesSet salesSet ){ List<SalesSetDistributor& ...
- Django 数据表更改
Django 数据表更改 « Django 开发内容管理系统(第四天) Django 后台 » 我们设计数据库的时候,早期设计完后,后期会发现不完善,要对数据表进行更改,这时候就要用到本节的知识. D ...
- 【Hibernate】数据Session对象的常规操作收集
因为Hibernate是ORM(对象关系映射)的,所以程序员是不需要写Sql语句的.所有的操作都是通过对对象的操作. 1,原生Session 事务管理 Transaction tx = session ...
- Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句
我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...
- vue element-ui el-date-picker 数据可以更改,但是前端不显示的更改后的数据问题
template: <el-form-item label="有效时间:" prop="validTime"> ...
- Dynamic CRM一对多关系的数据删除时设置自动删除关联的数据
在业务实体中主子表非常常见,然后子表可能有会有自己的子表或者多对多关系,在删除的业务场景下,删除主数据,剩余的子数据就成了脏数据, 之前的做法是,监听主表的删除事件,然后在插件中找到其下的子表数据然后 ...
随机推荐
- matlab 求解线性方程组之范数
1.赋范线性空间和内积空间 在线性代数的初级教材里,一般是在向量空间中定义内积,然后再由内积来导出范数,比如在n维实向量空间中: |x||=√<x,x> 在线性代数的高级教材中,一般是将内 ...
- 【BZOJ1415】 [Noi2005]聪聪和可可 概率与期望
其实题不难,不知提交了几次...不能代码MD...注意一些基本问题...SB概率题 #include <iostream> #include <cstdio> #include ...
- JAVA面试逻辑题1
一.计算推理 烧香问题: 有两根不均匀分布的香,每一根烧完的时间都是一小时.用什么办法确定一段15分钟的时间? 解题步骤: 1.点燃第一根的两头,同时点燃第二根的一头: 2.等到第一根燃尽以后,再点燃 ...
- CentOS 7 防止端口自动关闭
tl;dr firewall-cmd --permanent --zone=public --add-port=2888/tcp firewall-cmd --reload #重新载入服务 永久配置f ...
- Codeforces Round #361 (Div. 2) C
C - Mike and Chocolate Thieves Description Bad news came to Mike's village, some thieves stole a bun ...
- 一些gcd计数问题
数论什么的全都忘光了吧QAQ 做了几道简单的题练习一下. bzoj1101: [POI2007]Zap 求有多少对数满足 gcd(x,y)=d, 1<=x<=a, 1<=y<= ...
- 编译安装PHP的参数 --with-mysql --with-mysqli --with-apxs2默认路径
编译安装PHP时指定如下几个参数说明: --with-apxs2=/usr/local/apache/bin/apxs //整合apache,apxs功能是使用mod_so中的LoadModule指令 ...
- 免费SVN服务器笔记
前言: 笔者有个项目,需要类似公司一样进行源代码管理.鉴于很多团队一样,对资金资源限制,只能寻找免费的SVN服务器 于是在BD上搜索一大推资料,很多都是google的,但是GG经常无法正常访问,给项目 ...
- [译]MVC网站教程(一):多语言网站框架
本文简介 本博文介绍了 Visual Studio 工具生成的 ASP.NET MVC3 站点的基本框架:怎样实现网站的语言的国际化与本地化功能,从零开始实现用户身份认证机制,从零开始实现用户注册机制 ...
- AnguarJS 第一天----Hello World
AngularJS是什么? AngularJS是目前很火的前端JS框架之一, AngularJS的开发团队将其描述为一种构建动态Web应用的结构化框架.它是完全使用JavaScript编写的客户端技术 ...