将OneNote笔记与Word文档链接的两种方法(onenote怎样打开word文档)
829
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小时内删除侵权内容。