Hibernate配置文件详解

普通的多对一映射,B表加个<many-to-one>,双向的话A表再加个<set>
这是hibernate的基础东西,建议LZ好好学学,hibernate的个更方便快捷的ORM框架

前提:

数据库中有三个表:班级(Team), 学生(Student), 身份证(Certificate)。

三个表的关系如下:一个班级有多个学生,一个学生只属于一个班级,一个学生有一个身份证,一个身份证唯一对应一个学生。

则在Hibernate中会有三个XXX.hbm.xml文件,与这三个标对应。下面我们仅以一个简单实例来分析Hibernate的配置文件:

Student.hbm.xml文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
 <class name="model.Student" table="student" lazy="false" ><!--把类和数表关联起来-->  //S1
  <id name="id" unsaved-value="null" ><!--id的产生方式是uuid.hex--> //S2
   <generator class="uuid.hex" />
  </id>
  <property name="cardId" type="string" /><!--映射号-->  //S3
  <property name="name" type="string" /><!--映射学生名-->
  <property name="age" type="int" /><!--映射学生岁数-->
  <one-to-one name="cer" class="model.Certificate"  fetch="join" cascade="all"  /><!--映射对应的身分证对象-->// S4
  <many-to-one name="team" column="team_id" class="model.Team" cascade="all" fetch="join" /><!--映射班级-->//S5
 </class>
</hibernate-mapping>


配置文件的解释如下:
S1:model.Student类对应的数据库表是Student表。当使用多对一、一对一方式加载Student类时,将采用延迟加载(前提是设置预先抓取为false)。
S2:Student类有一个主键ID,id由Hibernate自动生成,生成算法是uuid.hex。在内存中有很多对象,可以通过unsaved-value来判定对象是持久化的,还是临时状态。当对象id值为unsaved-value指定的"null"时,认为此对象是未持久化的,否则认为此对象是持久化状态或脱管状态。
S3:Student类有个cardId属性,数据类型是String。有个name属性,数据类型是string。有个age属性,数据类型是int。
S4:一个一对一关联的对象属性,名为cer,在得到Student对象时,采用预先抓取得到cer对象。并且级联为all,说明Student的增加、删除及修改操作都回影响到cer对象。
S5:一个多对一关联的对象属性,名为team,在student表中通过team_id与team对象发生并联,team的实体类是model.Team。在取得Student实例时,使用预先抓取得到team对象。

原文地址:https://www.cnblogs.com/a1280055207/p/2856151.html