为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate初探之一对多映射

  • inverse属性
    查看全部
  • set元素的常用属性
    查看全部
  • 基本配置
    查看全部
  • 映射类型
    查看全部
  • 在没有设置级联的时候,即没有设置cascade属性的时候,任何对表的操作都是可以的,但是就不会关联另一表了.也没有意义. 即当没有设置级联操作,删除参照表的一条记录,外键表没有任何变化.当在参照表的映射文档设置了cascade="all"级联操作,同样是删除参照表的一条记录,但外键表中与此被删参照记录相关联的记录也相应会被删除(是整条记录都被删除,并不是指外键列的那个字段值被删除).
    查看全部
  • cascade属性 当设置了cascade属性不为none时,Hibernate会自动持久化所关联的对象. cascade属性的设置会带来性能上的变动,需谨慎设置. 在<set>标签与<many-to-one>标签中都有cascade属性. 如果在<set>设置了cascade="save-update":则当"一方"的对象通过session.save()方法保存在数据库中时,会自动进行级联操作,即保存"一方"的对象进数据库时也会把在"一方"对象中的Set集合中的"多方"对象保存进数据库.因此就可以省写session.save("多方的对象"). 也可以在<many-to-one>中添加cascade="save-update"属性,即当保存"多方"的对象进数据库时,如果数据库不存在此"多方"对象中的"一方"对象,那么会进行级联操作,会把此"一方"对象添加到数据库中. cascade可取: all:所有情况下均进行关联操作,即save-update和delete. none:所有情况下均不进行关联操作,这是默认值. save-update:在执行save/update/saveOrUpdate时进行关联操作. delete:在执行delete 时进行关联操作. all-delete-orphan:当一个节点在对象图中成为孤儿节点时,删除该节点.
    查看全部
  • 双向的关联关系中.Hibernate会产生没必要的更新维护语句,因为两边映射关系都对外键列进行更新维护了,但其实只有一方映射更新维护一次就可以了,另一边的映射关系不必要再更新一次. 可以通过inverse属性来控制. <set>节点的inverse属性指定关联的控制方向.如果双方都来维护,则会对性能上有影响. 关联关系中,inverse="false"(默认),则为主动方,由主动方负责维护关联关系.主动方意思就是如果先把"多方"对象保存在"一方"的Set集合中,那么"一方"就是主动方,"多方"为后动方. 如果先把"一方"的对象保存在"多方"的成员变量中.那个"多方"就是主动方,"一方"为后动方. 后动方总是会更新维护的,因此通常把inverse设置为true,仅让后动方进行维护即可.
    查看全部
  • set元素的常用属性 name:参照类中Set类型的成员名称. table:外键类所对应的数据表名.
    查看全部
  • 单向的一对多:"一方"实体类中添加泛型为"多方"类类型的set集合,并在"一方"的映射文档中设置<set>标签,其下添加<one-to-many>标签. 单向的多对一:通过"多方"的实体类中持有"一方"的引用实现,并在"多方"的映射文件的<class>标签下添加<many-to-one>标签. 双向的一对多和双向的多对一是一样的:同时满足单向的一对多与单向的多对一即可. 因此<many-to-one>标签不会写在<set>标签下,是直接写在<class>标签下. 而<one-to-many>标签需要在<set>标签下使用. 一般"一方"都是参照列,"多方"都是外键列. 单向的多对一: 在"多方"的实体类中,需要有一个"一方"类类型的成员变量,并且把"一方"的对象添加到此成员变量中.并在映射文档中加上<many-to-one>标签.
    查看全部
  • 当要更新学生所对应的班级信息. 只需先获取新的班级对象,再获取学生对象,把学生对象添加到新的班级对象的set集合中,最后用session.update()更新班级信息即可. Grade grade=(Grade)session.get(Grade.class,2); Student stu=(Student)session.get(Student.class,5); grade.getSet().add(stu); session.update(grade); 要删除学生信息则先获取学生信息对象,再用session.delete(obj)直接删除即可,不需要将此对象所对应的班级对象中的set集合中删除.
    查看全部
  • 因为设置了班级-->学生的映射,因此可以通过获取班级信息中的Set集合来获取到此班级包含的学生信息. 如果同时也设置了学生-->班级的映射(<many-to-one>),即双向映射,则可以通过获取学生对象中所对应的班级对象来获取班级信息. 建立了关联以后,可以方便的从一个对象导航到另外一个对象. 注意关联的方向,如果是双向的则可以从班级信息中获取到此班级的学生信息,也可以从学生信息中获取到此学生的班级信息. 图中是单向(班级-->学生).
    查看全部
  • 单向的一对多关联,即只在"一方"的映射文档中存在<one-to-many>标签.双向的一对多关联,即在"一方"存在<one-to-many>标签,"多方"存在<many-to-one>标签,且在多方的实体类中,存在一个"一方"类类型的成员变量.<many-to-one>是多对一的关联. <many-to-one>常用属性: name:表示属性名. column(可选):外键的字段名.它也可以通过嵌套的 <column>元素指定. class(可选):关联的类的名字.(即参照列的类名,即name属性所对应的类) cascade(级联),(可选):指明哪些操作会从父对象级联到关联的对象. unique(可选):使用DDL为外键字段生成一个唯一约束.此外,这也可以用作property-ref的目标属性.这使关联同时具有一对一的效果. not-null(可选):使用DDL为外键字段生成一个非空约束.
    查看全部
  • 设置了关联,则要在hbm.xml映射文档中进行配置. 两个表之间有关联,在数据库中一般都会设置主外键.在Hibernate技术中则用面向对象的思想设置. 一对多关联(在"一方"的映射文档配置) <class>标签下要添加一个<set>标签,其中set标签有name、table属性.name代表在"一方"实体类中集合Set属性的名字,table代表此Set属性存放的内容是属于哪一张表的. 在<set>标签下还有<key>子标签,其column属性来指定关联的外键列名. <set>标签下还有<one-to-many></one>单标签,存在class属性,来指明关联的"多方"的类名. <set name="set" table="Student"> <!-- 指定关联的外键列 --> <key column="cid"></key> <one-to-many class="com.zht.Student"></one> </set> 在hibernate设置关联时,外键表实体类中不需要额外设置外键列的成员变量.因为在参照表的映射文档中设置了<key>标签的column属性指定外键列.外键列的名字可以自定义.且外键列默认与参照表的<id>标签即主键的字段相关联. 在hibernate.cfg.xml文档的<mapping resource="">的resource属性,填写的是物理路径,要加/ session.save()方法中,session会去映射文档中寻找与参数中的对象相对应的映射类,匹配之后就会把对象保存在对应的表中. 要先保存参照列再保存外键列.
    查看全部
  • 不同的Hibernate版本,获取会话的方式也不一样.在Hibernate3和Hibernate4获取会话的方式不同. 可以建立一个工具类,专门用来获取sessionFactory、session等. public Class HiberUtil { private static SessionFactory sessionFactory; private static Session session; static{ //静态语句块内加载 Configuration config = new Configuration().configure(); ServiceRegistryBuilder srb = new ServiceRegistryBuilder().applySettings(config.getProperties()); ServiceRegistry sr = srb.buildServiceRegistry(); sessionFactory = config.buildSessionFactory(sr); //创建得到会话工厂 } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ session=sessionFactory.openSession(); return session; } }
    查看全部
  • 一般在配置文档的<property name="connection.url">中设置字符集,为了防止乱码. <property name="connection.url"> jdbc:mysql://localhost:3306/imooc?useUnicode=true&&characterEncoding=utf8 </property>
    查看全部

举报

0/150
提交
取消
课程须知
本课程主要讲解Java中Hibernate中的关联映射,需要对Hibernate基本用法、ORM的基本概念、单表映射等相关知识有一定的基础。
老师告诉你能学到什么?
1、Hibernate关联映射的类型 2、单向一对多关联的配置 3、单向多对一关联的配置 4、cascade和inverse属性的作用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!