当前位置:天才代写 > tutorial > JAVA 教程 > Hibernate各类映射干系总结

Hibernate各类映射干系总结

2017-11-11 08:00 星期六 所属: JAVA 教程 浏览:275

副标题#e#

1 多对一

第一步 :成立工具模子

User

—————————–

id:int

name:String

group:Group

Group

——————————

id:int

name:String

第二步:映射文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="User" table="t_user">
    <id name="id" column="id">
     <generator class="identity"/>
    </id>
    <property name="name" column="User_name" unique="true"/>
    <many-to-one name="group" column="groupid"/>
   </class>
</hibernate-mapping>

2 一对一映射


#p#副标题#e#

2.1 主键映射

1. 成立工具模子

Person[id-int,name-String] IdCard[id-int,cardNo-int]

2. 映射文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Person" table="t_person">
    <id name="id">
     <generator class="foreign">
     <param name="property">idCard</param>
     </generator>
    </id>
    <property name="name" column="Person_name" />
    <one-to-one name="idCard" constrained="true"/>
   </class>
</hibernate-mapping>

2.2 主键映射双向

只需要在IdCard 的XML中添加<one-to-one>标签指向person,就可以 汇报Hibernate如何加载person,默认凭据主键加载

2.3 外键关联映射

1. 工具模子

Person[id-int,name-String,idcard-IdCard] IdCard[id-int,cardNo-int]

2 mapping文件

Xml代码

Person.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Person" table="t_person">
    <id name="id">
     <generator class="identity">
     </generator>
    </id>
    <property name="name" column="Person_name" />
    <many-to-one name="idCard" unique="true"></many-to- one>
   </class>
</hibernate-mapping>

#p#副标题#e#

2.4 one-to-one 外键双向mapping

只需要在另一端(IdCard)插手<one-to-one>标签,可是hibernate默 认凭据主键加载,所以要汇报hibernate凭据指定列来加载

示意:

Xml代码

Id-card
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="IdCard" table="t_idcard">
    <id name="id" column="id">
     <generator class="identity"/>
    </id>
    <property name="cardNo" column="cardno" />
    <one-to-one name="person" property-ref="idCard"></one-to- one>
   </class>
</hibernate-mapping>

3 一对多映射

1  成立工具模子

Classes[id-int,name-String,student-Set] Student[id-int,name-String]

2  映射文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Class" table="t_class">
    <id name="id">
     <generator class="native"/>
    </id>
    <property name="name" />
    <set name="student" >
    <key column="classid" />
    <one-to-many class="Student"/>
    </set>
   </class>
</hibernate-mapping>

#p#分页标题#e#

缺点:若将Student的classid配置为非空,将无法生存。应为不是student这 一端维护干系,所以student不知道是哪个班级,所以需要发出多余的update语 句来更新干系。

(一对多): 先要session.sava(学生),再sessio.save(班级)

(多对一): 先要session.sava(班级),再sessio.save(学生)

改造 回收 一对多双向关联

Xml代码

<set name="student" inverse="true">
   <set name="student" inverse="true">

这样的长处是 存入数据让多的一端举办维护,不需要发出多余的 update.

#p#副标题#e#

4 多对多mapping

单向(回收第三方表)

1  工具模子

Role[id-int,name-String] User[id-int,name-String,role-Set]

2映射文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="User" table="t_user">
    <id name="id">
     <generator class="native"/>
    </id>
    <property name="name" />
    <set name="role" table="t_user_role">
    <key column="userid"></key>
    <many-to-many class="Role" column="roleid" />
    </set>
   </class>
</hibernate-mapping>

双向:

1 工具模子:

Role[id-int,name-String,user-Set] User[id-int,name-String,role-Set]

2 mapping文件:

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Role" table="t_role">
    <id name="id">
     <generator class="native"/>
    </id>
    <property name="name" />
    <set name="user" table="t_user_role">
    <key column="userid"></key>
    <many-to-many class="User" column="userid" />
    </set>
   </class>
</hibernate-mapping>

#p#副标题#e#

5 担任mapping

第一类担任映射

1 工具模子

Animal
private int id
private String name
private Boolean sex
--------------------------------------------------
public class Bird extends Animal
private int height
--------------------------------------------------
public class Pig extends Animal
private int weight

2 mapping 文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Animal" table="t_animal" >
    <id name="id" >
     <generator class="native"/>
    </id>
    <discriminator column="type"  type="string"></discriminator>
    <property name="name"/>
    <property name="sex"/>
    <subclass name="Pig" discriminator-value="P">
     <property name="weight"/>
    </subclass>
    <subclass name="Bird" discriminator-value="B">
     <property name="height"/>
    </subclass>
   </class>

</hibernate-mapping>

#p#副标题#e#

第二类mapping

1 工具模子

2 mapping 文件

Xml代码

#p#分页标题#e#

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Animal" table="t_animal" >
    <id name="id" >
     <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="sex"/>
     <joined-subclass name="Pig" table="t_pig">
      <key column="pid"/>
      <property name="weight"/>
     </joined-subclass>
     <joined-subclass name="Bird" table="t_bird">
      <key column="bid"/>
      <property name="height"/>
     </joined-subclass>
</class>
</hibernate-mapping>

3 第三类mapping

1工具模子

2 mapping 文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="Animal" table="t_animal" >
    <id name="id" >
     <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="sex"/>
    <union-subclass name="Pig" table="t_pig">
    <property name="weight"/>
    </union-subclass>
    <union-subclass name="Bird" table="t_bird">
    <property name="height"/>
    </union-subclass>
</class>
</hibernate-mapping>

#p#副标题#e#

6 Component 映射

component不是实体,没有OID。

1 工具模子

public class Employee
private int id
private String name
private Contact contact
-------------------------------------
public class Contact  
private String email
private String address
private String zipcode
private String contactTel
-------------------------------------
public class User
private int id
private String name
private Contact contact

2 mapping文件

Xml代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="User" table="t_user" >
    <id name="id" >
     <generator class="native"/>
    </id>
    <property name="name"/>
    <component name="contact">
    <property name="email"></property>
    <property name="address"></property>
    <property name="zipcode"></property>
    <property name="contactTel"></property>
    </component>
   </class>
  </hibernate-mapping>

 

7 复合主键mapping

凡是将复合主键相关属性,单独放到一个类中

这个类必需实现 Serializable接口

这个类必需重写hashCode()和equals()要领

XML

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.nintenyun.hibernate">
   <class name="SC" table="t_sc" >
    <composite-id name="scpk">
    <key-property name="sno"/>
    <key-property name="cno"/>
    </composite-id>
    <property name="sname"></property>
    <property name="cname"></property>
   </class>
</hibernate-mapping>

 

    关键字:

天才代写-代写联系方式