将OneNote笔记与Word文档链接的两种方法(onenote怎样打开word文档)
730
2022-05-30
hibernate学习笔记3
学习课程:
13_
多对一关联映射.avi
Hibernate_03_manyToone
14_
一对一主键关联映射_单向.avi
Hibernate_04_oneToone_pk_1
14_
一对一主键关联映射_双向.avi
Hibernate_05_oneToone_pk_2
16_
一对一唯一外键关联映射_单向.avi
Hibernate_06_oneToone_upk_1
16_
一对一唯一外键关联映射_
双
向.avi
Hibernate_07_oneToone_upk_2
学习内容:
多对一关联映射
一对一主键关联映射_单向
一对一主键关联映射_双向
一对一唯一外键关联映射_单向
一对一唯一外键关联映射_双向
一对一主键关联映射_单向
一对一主键关联映射_双向
一对一唯一外键关联映射_单向
一对一唯一外键关联映射_双向
1.
多对一关联映射
多对一关联映射
关联映射的本质:
*
将关联关系映射到数据库(关联关系:对象模型在内存中的一个或多个引用)
在多的一段的映射文件加入
在"多"的一端加入字段作为外键参照"一"端
重要属性(cascade)级联
*
级联的意思是指定两个而对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的
级联对象也需要执行想同的操作
*
总工可以取值为: all、none、save-update、delete
*all——
代表在所有的情况下都执行级联操作
*none——
在所有的情况下都不执行级联操作
*save-update——
在保存和更新的时候执行级联操作
*delete——
在删除的时候执行级联操作
*
如: cascade="all"/> persistent 状态的对象不能引用 transisent状态的对象 testLoad1 查询保存在user_message中的数据信息,以及相关外键的信息 1. 修改原先定义好的User类中id属性类型为int 2. 在User.hbm.xml文件中添加字段 3. 新建Group.java实体类添加字段 id name 以及get和set方法 id类型int name类型String,并且生成相应的配置文件,其中生成策略为native 4. 执行testExport.java 测试类中方法的主要代码片段: 所有测试方法,以及其作用 testManyToOne1 不保存Group对象,会报错 testManyToOne2 保存Group对象,不会报错 testManyToOne3 不保存Group对象,但是设置cascade属性为all,不会报错 testLoad1 查询保存在user_message中的数据信息,以及相关外键的信息 testManyToOne1 Group group = new Group();group.setName( "科学家" );User user = new User();user.setName( "爱因斯坦" );user.setAge( 20 );user.setCreateTime( new Date() );user.setExpireTime( new Date() );user.setGroup( group ); session.save( user ); testManyToone2 Group group = new Group();group.setName( "科学家" );session.save( group );User user = new User();user.setName( "爱因斯坦" );user.setAge( 20 );user.setCreateTime( new Date() );user.setExpireTime( new Date() );user.setGroup( group );session.save( user ); testManyToone3 Group group = new Group();group.setName( "科学家" );User user = new User();user.setName( "爱因斯坦" );user.setAge( 20 );user.setCreateTime( new Date() );user.setExpireTime( new Date() );user.setGroup( group );session.save( user ); testLoad() 测试结果: Hibernate: 向 user_message中发送查询语句 爱因斯坦 Hibernate: 向 group_message 表发送查询语句 科学家 User user = ( User )session.get( User.class , 1 );System.out.println( user.getName() );System.out.println( user.getGroup().getName() ); 2. 一对一主键关联映射_单向 一对一关联映射(one-to-one) * 两个对象之间是一对一的关系,如Person—IdCard * 有两种策略可以实现一对一的关联映射 * 主键关联:即让两个对象具有相同的主键值, 以表明他们之间的一一对应的关系, 这样可以避免多余的字段被创建; 数据库不会有额外的字段来维护它们之间的关 系,仅通过表的主键来关联 * 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之 后,也可以用来表示一对一关联关系。 单向关联 :只能一端访问另一段。 双向关联 :两端可以进行互相访问。 hibernate_04_oneToone_pk_1 例子 Person :(int id ),(String name),(IdCard idCard) IdCard :(int id ),( String cardNo) Person 中的id字段作为一个外键参照IdCard中的id字段, 即Persion中的id字段的数据来源于IdCard中的id字段值,共享IdCard的主键 设置Person.hbm.xml生成策略为foreign,加参数idCard 只是Hibernate怎么加载它的关联对象,默认根据主键加载 (外键约束,表名当前主键上存在一个约束,Person 的主键作为外键参照IdCard) > 一对一关联映射中默认了cascade属性 所以不用保存IdCard就能够运行成功。 session.save(person); 执行过该语句后Hibernate发送insert into idCard_message 当提交事务以后Hibernate再发送insert into person_message session.get( 类名,id值); 通过人来查找身份证号。 测试类,方法的主要代码: testSave() Group group = new Group();group.setName( "科学家" );User user = new User();user.setName( "爱因斯坦" );user.setAge( 20 );user.setCreateTime( new Date() );user.setExpireTime( new Date() );user.setGroup( group ); testLoad() Person person = (Person) session.get( Person.class , 3 );System.out.println( "person.name = " + person.getName() );System.out.println( "person.idCard = " +person.getIdCard().getCardNo()); 2. 一对一主键关联映射_双向 Person <----> IdCard 在IdCard端持有person的引用 在IdCard.hbm.xml中加入 指向person 指示Hibernate如何加载person 默认根据加载主键 进行加载的时候,使用IdCard查询Person.name 只发送一条查询语句,fatch默认join,只发送一条外连接 相关主要代码: testSave () 添加数据 IdCard idCard = new IdCard();idCard.setCardNo( "1111111" );Person person = new Person();person.setName( "太阳星" );person.setIdCard( idCard ); testLoad1 () IdCard --> Person 进行查询数据 IdCard idCard = (IdCard) session.get( IdCard.class, 1 );System.out.println( "person.name = " + idCard.getPerson().getName() );System.out.println( "person.cardNo" + idCard.getCardNo() ); testLoad2 () Person --> IdCard 进行查询数据 Person person = (Person) session.get( Person.class , 1 );System.out.println( "Person.name = " + person.getName() );System.out.println( "Person.cardNo = " + person.getIdCard().getCardNo() ); 3. 一对一唯一外键关联映射——单向 多对一映射的特例 hibernate04_oneToone_upk_1 person_message 与idCard_message 增加字段IdCard,person主键自增 显示多的一端的多重性唯一 相关主要代码: testeSave() 添加数据 IdCard idCard = new IdCard();idCard.setCardNo( "1111111" );session.save( idCard );Person person = new Person();person.setName( "太阳星" );person.setIdCard( idCard ); testLoad() 从 Person --> IdCard Person person = (Person) session.get( Person.class , 1 ); System.out.println( "person.name = " + person.getName() );System.out.println( "person.idCard = " + person.getIdCard().getCardNo()); 4. 一对一唯一外键关联映射——双向 在idcard中加入字段person 采用one-to-one来进行映射 ,指示hibernate如何加载其关联对象,默认根据主键加载person,因为外键 关联映射中采用,因为两个实体采用的是person的外键进行维护的关系,所以不能指定主键加载person, 而要根据person的外键进行加载,所以设置property-ref属性来指定向哪个字段进行比较 相关主要代码: testSave () 添加数据 IdCard idCard = new IdCard();idCard.setCardNo( "1111112" );session.save( idCard );Person person = new Person();person.setName( "太阳星" );person.setIdCard( idCard ); testLoad1 () IdCard --> Person 进行查询数据 IdCard idCard = (IdCard) session.get( IdCard.class , 1 );System.out.println( "person.name = " + idCard.getPerson().getName() );System.out.println( "person.idCard = " + idCard.getCardNo() ); testLoad2 () Person --> IdCard 进行查询数据 Person person = (Person) session.get( Person.class , 1 ); System.out.println( person.getName() + " " + person.getIdCard().getCardNo() ); 提示: 修改one-to-one中的属性不用重新生成表 修改many-to-one中的属性需要重新生成表 XML
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。