hibernate表关联的各种配置:

来源:互联网 发布:adobe xd mac 破解版 编辑:程序博客网 时间:2024/05/21 21:50

hibernate表关联的各种配置:
1、多对多单向:
    user----->role
    user.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.User" table="t_user">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="roles" table="t_user_role">
                    <key column="userid"/>
                    <many-to-many class="com.yourdomain.Role" column="roleid"/>
                </set>
            </class>
        </hibernate-mapping>
    role.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Role" table="t_role">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
            </class>
        </hibernate-mapping>
2、多对多双向:
    user.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.User" table="t_user">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="roles" table="t_user_role">
                    <key column="userid"/>
                    <many-to-many class="com.yourdomain.Role" column="roleid"/>
                </set>
            </class>
        </hibernate-mapping>
    role.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Role" table="t_role">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="users" table="t_user_role" order-by="userid">
                    <!--t_user_role是第三方关联表-->
                    <key column="roleid"/>
                    <!--第三方表的作为外键指向本配置对象ID-->
                    <many-to-many class="com.yourdomain.User" column="userid"/>
                    <!--userid作为主键指向与之关联的另一对象ID-->
                </set>
            </class>
        </hibernate-mapping>
3、一对多单向:
    student(多)----->classes(一)
    student.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Student" table="t_student">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
            </class>
        </hibernate-mapping>
    classes.hbm.xml:
        <hibernate-mapping package="com.yourdomain">
            <class name="Classes" table="t_classes">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="students">
                    <key column="classesid"/>//classesid是在student表中加的一字段列名
                    <one-to-many class="Student"/>
                </set>
            </class>
        </hibernate-mapping>
4、一对多双向:
    student(多)----->classes(一)
    student.hbm.xml:
        <hibernate-mapping>
            <class name="com.yourdomain.Student" table="t_student">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <many-to-one name="classes" column="classesid"/>
            </class>
        </hibernate-mapping>
    classes.hbm.xml:
        <hibernate-mapping package="com.yourdomain">
            <class name="Classes" table="t_classes">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"/>
                <set name="students" inverse="true" cascade="all">//inverse表示维护关系反转,true表示失效,不由classes
                //这端来维护。cascade表示级联,即当对classes操作时,发现还未有student持久化,会自动持久化student的
                    <key column="classesid"/>
                    <one-to-many class="Student"/>
                </set>
            </class>
        </hibernate-mapping>

5、一对一主键关联(单向关联Person---->IdCard)
 一对一主键关联映射:让两个实体对象的id保持相同,这样可以避免多余的字段被创建

Person.java

 
 Person.hbm.xml://其对应的表中只有id,name两个属性
  <?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>
   <class name="com.bjsxt.hibernate.Person" table="t_person">
    <id name="id">
     <generator class="foreign">//主键生成方式受制于IdCard主键生成方式
      <param name="property">idCard</param>
     </generator>
    </id>
    <property name="name"/>
    <one-to-one name="idCard" constrained="true"/>
   </class>
  </hibernate-mapping>

 

IdCard.java:

 
 IdCard.hbm.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>
   <class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
    <id name="id">
     <generator class="native"/>
    </id>
    <property name="cardNo"/>
   </class>
  </hibernate-mapping>

6、一对一主键关联(双向Person<-------->IdCard)

       与一对一主键关联(单向)大体一致,只不过IdCard.hbm.xml的配置里要一个one-to-ont属性,IdCard.java里加一个Person的引用。

IdCard.java:

 

IdCard.hbm.xml:

7、一对一唯一外键关联(单向Person----->IdCard)

其实是多对对一的一个特例。

Person.java

Person.hbm.xml

IdCard.java

IdCard.hbm.xml

 

8、一对一唯一外键关联(双向Person<----->IdCard)

相对于上面的一对一唯一外键关联(单向)不同的是,IdCard.java添加了Person的引用与IdCard.hbm.xml添加了one-to-one标签。

IdCard.java:

 

IdCard.hbm.xml:

原创粉丝点击