为什么我的on delete cascadee="all"失效了

文档分类:
在线文档经过高度压缩,下载原文更清晰。
淘豆网网友近日为您收集整理了关于Hibernate解编程的文档,希望对您的工作和学习有所帮助。以下是文档介绍:第 1 页共 22 页Hibernate 注解编程&!-- EJB注解编程--&&hibernate-configuration&&session-factory&&property name=&hibernate.connection.url&&jdbc:mysql://localhost:3306/test&/property&&property name=&hibernate.connection.driver_class&&com.mysql.jdbc.Driver&/property&&property name=&hibernate.connection.username&&root&/property&&property name=&hibernate.connection.password&&imti&/property&&property name=&hibernate.dialect&&org.hibernate.dialect.MySQLDialect&/property&&mapping class=&com.xmxz.hibernate.annotation.IdCard& /&&mapping class=&com.xmxz.hibernate.annotation.Person& /&&/session-factory&&/hibernate-configuration&&!—XML映射--&&hibernate-configuration&&session-factory&&property name=&hibernate.connection.url&&jdbc:mysql://localhost:3306/test&/property&&property name=&hibernate.connection.driver_class&&com.mysql.jdbc.Driver&/property&&property name=&hibernate.connection.username&&root&/property&&property name=&hibernate.connection.password&&imti&/property&&property name=&hibernate.dialect&&org.hibernate.dialect.MySQLDialect&/property&&property name=&hibernate.show_sql&&true&/property&&property name=&hibernate.hbm2ddl.auto&&update&/property&&mapping resource=&com/xmxz/hibernate/mobile/Operator.hbm.xml& /&&mappingresource=&com/xmxz/hibernate/mobile/MobileUser.hbm.xml& /&&mappingresource=&com/xmxz/hibernate/mobile/FillMoneyCard.hbm.xml& /&&mapping resource=&com/xmxz/hibernate/mobile/SPConst.hbm.xml& /&&mapping resource=&com/xmxz/hibernate/mobile/MobileSP.hbm.xml& /&&mappingresource=&com/xmxz/hibernate/mobile/FillMoneyHistory.hbm.xml& /&&mapping resource=&com/xmxz/hibernate/mobile/Message.hbm.xml& /&&/session-factory&&/hibernate-configuration&第 2 页共 22 页ExportDBpublic class ExportDB {public static void main(String[] args) {// 读取hibernate.cfg.xml文件Configuration cfg = new Configuration() .configure(&&);SchemaExport export = new SchemaExport(cfg);export.create(true, true);}}HibernateUtilspublic class HibernateUtils {private static SessionFstatic {// 单例模式try {Configuration cfg = new Configuration().configure();factory = cfg.buildSessionFactory();} catch (HibernateException e) {e.printStackTrace();}}/*** 获取当前的会话工厂* @return*/public static SessionFactory getSessionFactory() {}/*** 获取当前的会话* @return*/public static Session getSession() {return factory.openSession();}/*** 关闭会话(session)* @param session当前的会话*/public static void closeSession(Session session) {if (session != null) {if (session.isOpen()) {session.close();}}}}第 3 页共 22 页ExportDBAnnotationpublic class ExportDBAnnotation {public static void main(String[] args) {// 读取hibernate.cfg.annotation.xml文件Configuration cfg = new AnnotationConfiguration().configure(&hibernate.cfg.annotation.xml&);SchemaExport export = new SchemaExport(cfg);// export.setFormat(true);// 设置保存SQL脚本的文件名// export.setOutputFile(&new.sql&);// 输出SQL脚本,并执行SQL脚本export.create(true, true);}}HibernateAnnotationUtils/*** 使用EJB注解做的* @author Administrator*/public class HibernateAnnotationUtils {private static SessionFstatic {// 单例模式try {Configuration cfg = new AnnotationConfiguration().configure(&hibernate.cfg.annotation.xml&);factory = cfg.buildSessionFactory();} catch (HibernateException e) {e.printStackTrace();}}public static SessionFactory getSessionFactory() {}public static Session getSession() {return factory.openSession();}public static void closeSession(Session session) {if (session != null) {if (session.isOpen()) {session.close();}}}}第 4 页共 22 页【一对一】关系映射模型:人和身份证通过人可以得知身份证号码,根据身份证号码可以得知人Person/*** 人(通过外键实现一对一关系)* @author Administrator*/// 屏蔽缺少“serialVersionUID”定义警告@SuppressWarnings(&serial&)// 指明实体Bean名,默认值是类名@Entity(name = &Person&)// 实体对应的数据表 name表名;uniqueConstraints唯一约束性;主键@Table(name = &t_person&, uniqueConstraints = { @UniqueConstraint(columnNames ={ &id& }) })public class Person implements Serializable {private Iprivate Sprivate IdCard idC@Id// 主键唯一标识@Column(name = &id&)// 字段名@GeneratedValue(strategy = GenerationType.AUTO)// 自动增加public Integer getId() {}public void setId(Integer id) {this.id =}@Column(name = &name&, length = 16, nullable = false)//name字段名,length字段最大字符长度,nullable是否允许为空,precision字段精度,scale小数位数public String getName() {}public void setName(String name) {this.name =}//optional是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true@JoinColumn(name = &cardID&)@OneToOne(cascade = CascadeType.ALL, optional = false)public IdCard getIdCard() {return idC}public void setIdCard(IdCard idCard) {this.idCard = idC}}第 5 页共 22 页IdCard/*** 身份证(通过外键实现一对一关系)* @author Administrator*/// 屏蔽缺少“serialVersionUID”定义警告@SuppressWarnings(&serial&)// 指明实体Bean名,默认值是类名@Entity(name = &IdCard&)// 实体对应的数据表 name表名;uniqueConstraints唯一约束性;主键@Table(name = &t_idcard&, uniqueConstraints = { @UniqueConstraint(columnNames ={ &id& }) })public class IdCard implements Serializable {private Iprivate String cardNo;private P@Id// 主键唯一标识@Column(name = &id&)// 字段名@GeneratedValue(strategy = GenerationType.AUTO)// 自动增加public Integer getId() {}public void setId(Integer id) {this.id =}@Column(name = &cardNo&, length = 32, nullable = false)//name字段名,length字段最大字符长度,nullable是否允许为空,precision字段精度,scale小数位数public String getCardNo() {return cardNo;}public void setCardNo(String cardNo) {this.cardNo = cardNo;}// 表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性@OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = &idCard&)public Person getPerson() {}public void setPerson(Person person) {this.person =}}第 6 页共 22 页【一对一】est/*** 一对一关系映射(双向)唯一外键关联* @author Administrator*/public class est extends TestCase {public void testSave() {Session session =Transaction tx =try {session = HibernateAnnotationUtils.getSession();tx = session.beginTransaction();// 开启事务IdCard idCard = new IdCard();idCard.setCardNo(&204977&);session.save(idCard);// ※※※※※Person person = new Person();person.setName(&马远志&);person.setIdCard(idCard);session.save(person);// mit();} catch (HibernateException e) {e.printStackTrace();// 事务回滚tx.rollback();} finally {// 关闭会话HibernateAnnotationUtils.closeSession(session);}}public void testLoad() {Session session =Transaction tx =try {session = HibernateAnnotationUtils.getSession();tx = session.beginTransaction();// 开启事务Person person = (Person) session.load(Person.class, 1);System.out.println(&姓名:& + person.getName());System.out.println(&身份证:& + person.getIdCard().getCardNo());mit();} catch (HibernateException e) {e.printStackTrace();tx.rollback();} finally {HibernateAnnotationUtils.closeSession(session);}}第 7 页共 22 页public void testLoad1() {Session session =Transaction tx =try {session = HibernateAnnotationUtils.getSession();tx = session.beginTransaction();// 开启事务IdCard idCard = (IdCard) session.load(IdCard.class, 1);System.out.println(&身份证:& + idCard.getCardNo());System.out.println(&姓名:& + idCard.getPerson().getName());mit();} catch (HibernateException e) {e.printStackTrace();tx.rollback();} finally {HibernateAnnotationUtils.closeSession(session);}}}【一对多】关系映射模型:班级和学生一个班级有多名学生,一个学生属于某个班级Classes/*** 班级* @author Administrator*/// 屏蔽缺少“serialVersionUID”定义警告@SuppressWarnings(&serial&)// 指明实体Bean名,默认值是类名@Entity(name = &Classes&)// 实体对应的数据表 name表名;uniqueConstraints唯一约束性;主键@Table(name = &t_classes&, uniqueConstraints = { @UniqueConstraint(columnNames ={ &id& }) })public class Classes implements Serializable {private Iprivate Sprivate S@Id// 主键唯一标识@Column(name = &id&)// 字段名@GeneratedValue(strategy = GenerationType.AUTO)// 自动增加public Integer getId() {}public void setId(Integer id) {this.id =}第 8 页共 22 页@Column(name = &name&, length = 16, nullable = false)//name字段名,length字段最大字符长度,nullable是否允许为空,precision字段精度,scale小数位数public String getName() {}public void setName(String name) {this.name =}@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }, targetEntity =Student.class, mappedBy = &classes&)public Set getStudents() {}public void setStudents(Set students) {this.students =}}Student/*** 学生* @author Administrator*/// 屏蔽缺少“serialVersionUID”定义警告@SuppressWarnings(&serial&)// 指明实体Bean名,默认值是类名@Entity(name = &Student&)// 实体对应的数据表 name表名;uniqueConstraints唯一约束性;主键@Table(name = &t_student&, uniqueConstraints = { @UniqueConstraint(columnNames ={ &id& }) })public class Student implements Serializable {private Iprivate Sprivate Date createTprivate C@Id// 主键唯一标识@Column(name = &id&)// 字段名@GeneratedValue(strategy = GenerationType.AUTO)// 自动增加public Integer getId() {}public void setId(Integer id) {this.id =}第 9 页共 22 页@Column(name = &name&, length = 16, nullable = false)//name字段名,length字段最大字符长度,nullable是否允许为空,precision字段精度,scale小数位数public String getName() {}public void setName(String name) {this.name =}// optional是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, optional = true)@JoinColumn(name = &classesid&)public Classes getClasses() {}public void setClasses(Classes classes) {this.classes =}@Column(name = &createTime&)// 字段名称@Temporal(TemporalType.TIMESTAMP)// 日期型字段:日期时间型// @Temporal(TemporalType.DATE)public Date getCreateTime() {return createT}public void setCreateTime(Date createTime) {this.createTime = createT}}【一对多】测试类初始化数据InitData/*** 初始化数据* @author Administrator*/public class InitData {public static void main(String[] args) {Session session =Transaction tx =try {session = HibernateAnnotationUtils.getSession();tx = session.beginTransaction();// 开启事务for (int i = 0; i & 10; i++) {Classes classes = new Classes();classes.setName(&班级& + i);session.save(classes);for (int j = 0; j & 10; j++) {Student student = new Student();第 10 页共 22 页student.setName(&班级& + i + &的学生& + j);student.setCreateTime(randomDate(&&,&&));// 在内存中建立由student指向classes的引用student.setClasses(classes);session.save(student);}}for (int i = 0; i & 5; i++) {Classes classes = new Classes();classes.setName(&无学生班级& + i);session.save(classes);}for (int i = 0; i & 10; i++) {Student student = new Student();student.setName(&无业游民& + i);session.save(student);}// mit();} catch (Exception e) {e.printStackTrace();// 事务回滚tx.rollback();} finally {// 关闭会话HibernateAnnotationUtils.closeSession(session);}}/*** 获取随机日期* @param beginDate起始日期,格式为:yyyy-MM-dd* @param endDate结束日期,格式为:yyyy-MM-dd* @return*/private static Date randomDate(String beginDate, String endDate) {try {DateFormat format = new SimpleDateFormat(&yyyy-MM-dd&);Date start = format.parse(beginDate);Date end = format.parse(endDate);if (start.getTime() &= end.getTime()) {}long date = random(start.getTime(), end.getTime());return new Date(date);} catch (Exception e) {e.printStackTrace();}}播放器加载中,请稍候...
该用户其他文档
下载所得到的文件列表Hibernate解编程.doc
文档介绍:
第 1 页共 22 页Hibernate 注解编程&!-- EJB注解编程--&&hibernate-configuration&&session-factory&&property name=&hibernate.connection.url&&jdbc:mysql://localhost:3306/test&/property&&property name=&hibernate.connection.driver_class&&com.mysql.jdbc.Driver&/property&&property name=&hibernate.connection.u...
内容来自淘豆网转载请标明出处.6866人阅读
框架--hibernate(3)
一:Group和Users两个类
假定一个组里有n多用户,但是一个用户只对应一个用户组。
1.所以Group对于Users是“一对多”的关联关系@OneToMany
Users对于Group是“多对一”@ManyToOne
2.CRUD时候,希望是能从具体用户Users查到其对应的Group,反过来也能通过Group查到具体Users,所以是双向关联
(所以要用mappedBy去除冗余信息)
@Table(name=&t_Group&)//指定一个表名
public class Group
private Set&Users& users = new HashSet&Users&();
@GeneratedValue//主键用自增序列
public int getId() {
@OneToMany(mappedBy=&group&,cascade=(CascadeType.ALL))//以“多”一方为主导管理,级联用ALL
public Set&Users& getUsers() {
@Table(name=&t_Users&)
public class Users
@GeneratedValue
public int getId() {
@ManyToOne(fetch=FetchType.LAZY,cascade=(CascadeType.ALL))//解决1+N,级联用ALL
@JoinColumn(name=&groupId&)//指定外键名称,不指定的默认值是group_Id
public Group getGroup() {
cascade:级联,只影响cud,不影响r
(all全都级联,persist存储时级联,remove删除时级联)
如果没有设置cascade,默认需要save(Group)和save(users),两个都要存,设置级联之后,只存一个就行了
级联依赖于这句:@ManyToOne(cascade=(CascadeType.ALL))//需要依赖于其他的东西时候
设置好正反向之后,多个有级联关系的对象就一起被保存了
public void testC() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Users u1 = new Users();
Users u2 = new Users();
u1.setName(&u1&);
u2.setName(&u2&);
//u1和u2的id自增
Group g = new Group();
g.setName(&g1&);
//g的id自增
g.getUsers().add(u1);//正向
g.getUsers().add(u2);
u1.setGroup(g);//反向
u2.setGroup(g);//不然u1和u2中的group信息为空
session.save(g);//因为设置级联,所以存储g时候也把u1和u2存上了。
//不设置级联的话,还要存储u1和u2
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
默认会这样处理(平时管用的思路也是这样):
1.取“多”的时候,把“一”取出来
2.取“一”时,不取“多”的,用到时候再去取(看user信息时候一般看组名,看group时候user信息太多不必看)
fetch管读取,cascade管增删改
@OneToMany(mappedBy=&group&,cascade=(CascadeType.ALL),fetch=FetchType.EAGER)
@OneToMany默认的是LAZY,@ManyToOne默认是EAGER
User u = (User)s.get(User.class,1);
//取user时候,把group也取出来,
Users u = (Users)session.get(Users.class,11);//取id为11号的u
//hibernate产生的语句里也把group拿出来了:group1_.id as id0_0_,和group1_.name as name0_0_ Hibernate:
users0_.id as id1_1_,
users0_.groupId as groupId1_1_,
users0_.name as name1_1_,
group1_.id as id0_0_,
group1_.name as name0_0_
t_Users users0_
left outer join
t_Group group1_
on users0_.groupId=group1_.id
users0_.id=?
只取出Group的话,不会去查询里边的user
//只取出Group的话,不会去查询里边的user
Group group = (Group)session.get(Group.class,11);Hibernate:
group0_.id as id0_0_,
group0_.name as name0_0_
t_Group group0_
group0_.id=?
注意:fetch影响两者读取顺序(两边都设成EAGER要多取出一次),反正都要取,具体再试
@OneToMany,@ManyToOne都写cascade=(CascadeType.ALL)
update时候自动关联更新
//因为cascade=(CascadeType.ALL),所以自动关联更新
Users u = (Users)session.load(Users.class,11);//取id为11号的u
u.setName(&u250&);
u.getGroup().setName(&gp01&);
删多:实测只删掉目的项目,不关联其他
先load(就是select)一下,确认有之后,再删
没有遇到:不能直接s.delete(u),因为u和group有级联,group和所有users都有级联,一下就够给删掉了的情况
不过严谨起见,还是设置一个u.setGroup(null);比较好
Users u1 = new Users();
u1.setId(18);
u1.setGroup(null);//严谨起见,应该先让俩表脱离关联
session.delete(u1);
HQL对应的语句(作用是一样的):s.createQuery(&delete from User u where u.id = 1&).executeUpdate();//User是类名
删一:如果有子项目,报错不让删除
Group g = (Group)s.load(Group.class,1);
s.delete(g);
Hibernate:
22:56:20,691
WARN SqlExceptionHelper:143 - SQL Error: 2292, SQLState: 23000
22:56:20,692 ERROR SqlExceptionHelper:144 - ORA-02292: 违反完整约束条件 (SCOTT.FK9F52DA5D4E678049) - 已找到子记录
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:76766次
积分:1193
积分:1193
排名:千里之外
原创:32篇
转载:87篇
评论:11条
(1)(1)(8)(18)(14)(4)(6)(8)(1)(7)(11)(15)(5)(6)(2)(11)(1)【openCV】使用opencv_traincascade.exe 遇到的问题
[问题点数:40分]
【openCV】使用opencv_traincascade.exe 遇到的问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。Hibernate基础之10:一对多关联的CRUD_@ManyToOne(cascade=(CascadeType.ALL)) - Web前端当前位置:& &&&Hibernate基础之10:一对多关联的CRUD_@ManyToOne(cHibernate基础之10:一对多关联的CRUD_@ManyToOne(cascade=(CascadeType.ALL))&&网友分享于:&&浏览:1880次Hibernate基础之十:一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))
一:Group和Users两个类
假定一个组里有n多用户,但是一个用户只对应一个用户组。
1.所以Group对于Users是“一对多”的关联关系@OneToMany
Users对于Group是“多对一”@ManyToOne
2.CRUD时候,希望是能从具体用户Users查到其对应的Group,反过来也能通过Group查到具体Users,所以是双向关联
(所以要用mappedBy去除冗余信息)
@Table(name=&t_Group&)//指定一个表名
public class Group
private Set&Users& users = new HashSet&Users&();
@GeneratedValue//主键用自增序列
public int getId() {
@OneToMany(mappedBy=&group&,cascade=(CascadeType.ALL))//以“多”一方为主导管理,级联用ALL
public Set&Users& getUsers() {
@Table(name=&t_Users&)
public class Users
@GeneratedValue
public int getId() {
@ManyToOne(fetch=FetchType.LAZY,cascade=(CascadeType.ALL))//解决1+N,级联用ALL
@JoinColumn(name=&groupId&)//指定外键名称,不指定的默认值是group_Id
public Group getGroup() {
cascade:级联,只影响cud,不影响r
(all全都级联,persist存储时级联,remove删除时级联)
如果没有设置cascade,默认需要save(Group)和save(users),两个都要存,设置级联之后,只存一个就行了
级联依赖于这句:@ManyToOne(cascade=(CascadeType.ALL))//需要依赖于其他的东西时候
设置好正反向之后,多个有级联关系的对象就一起被保存了
public void testC() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Users u1 = new Users();
Users u2 = new Users();
u1.setName(&u1&);
u2.setName(&u2&);
//u1和u2的id自增
Group g = new Group();
g.setName(&g1&);
//g的id自增
g.getUsers().add(u1);//正向
g.getUsers().add(u2);
u1.setGroup(g);//反向
u2.setGroup(g);//不然u1和u2中的group信息为空
session.save(g);//因为设置级联,所以存储g时候也把u1和u2存上了。
//不设置级联的话,还要存储u1和u2
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
默认会这样处理(平时管用的思路也是这样):
1.取“多”的时候,把“一”取出来
2.取“一”时,不取“多”的,用到时候再去取(看user信息时候一般看组名,看group时候user信息太多不必看)
fetch管读取,cascade管增删改
@OneToMany(mappedBy=&group&,cascade=(CascadeType.ALL),fetch=FetchType.EAGER)
@OneToMany默认的是LAZY,@ManyToOne默认是EAGER
User u = (User)s.get(User.class,1);
//取user时候,把group也取出来,
Users u = (Users)session.get(Users.class,11);//取id为11号的u
//hibernate产生的语句里也把group拿出来了:group1_.id as id0_0_,和group1_.name as name0_0_ Hibernate:
users0_.id as id1_1_,
users0_.groupId as groupId1_1_,
users0_.name as name1_1_,
group1_.id as id0_0_,
group1_.name as name0_0_
t_Users users0_
left outer join
t_Group group1_
on users0_.groupId=group1_.id
users0_.id=?
只取出Group的话,不会去查询里边的user
//只取出Group的话,不会去查询里边的user
Group group = (Group)session.get(Group.class,11);
Hibernate:
group0_.id as id0_0_,
group0_.name as name0_0_
t_Group group0_
group0_.id=?
注意:fetch影响两者读取顺序(两边都设成EAGER要多取出一次),反正都要取,具体再试
@OneToMany,@ManyToOne都写cascade=(CascadeType.ALL)
update时候自动关联更新
//因为cascade=(CascadeType.ALL),所以自动关联更新
Users u = (Users)session.load(Users.class,11);//取id为11号的u
u.setName(&u250&);
u.getGroup().setName(&gp01&);
删多:实测只删掉目的项目,不关联其他
先load(就是select)一下,确认有之后,再删
没有遇到:不能直接s.delete(u),因为u和group有级联,group和所有users都有级联,一下就够给删掉了的情况
不过严谨起见,还是设置一个u.setGroup(null);比较好
Users u1 = new Users();
u1.setId(18);
u1.setGroup(null);//严谨起见,应该先让俩表脱离关联
session.delete(u1);
HQL对应的语句(作用是一样的):s.createQuery(&delete from User u where u.id = 1&).executeUpdate();//User是类名
删一:如果有子项目,报错不让删除
Group g = (Group)s.load(Group.class,1);
s.delete(g);
Hibernate:
22:56:20,691
WARN SqlExceptionHelper:143 - SQL Error: 2292, SQLState: 23000
22:56:20,692 ERROR SqlExceptionHelper:144 - ORA-02292: 违反完整约束条件 (SCOTT.FK9F52DA5D4E678049) - 已找到子记录
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 java replaceall失效 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信