hibernate中关联关系的小结

简介: 一对一方案1: 一对一的表现是形式是建立在一对多的基础之上。让外键唯一就可以变成一对一 类的写法: Users类 public class Users{     private Long userid;     private String username;     //看着是一对多。实质由于外键放已经具备唯一约束,所以set集合中只有一条数据     private S
一对一方案1:
一对一的表现是形式是建立在一对多的基础之上。让外键唯一就可以变成一对一
类的写法:
Users类
public class Users{
    private Long userid;
    private String username;
    //看着是一对多。实质由于外键放已经具备唯一约束,所以set集合中只有一条数据
    private Set<Orders> orderses = new HashSet<Orders>();
}
Orders类:
public class Orders{
    private Long orderid;
    private Double price;
    private Users users;
}
配置文件:
Users配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Users" table="USERS" schema="PUKE12">
        <id name="userid" type="java.lang.Long">
            <column name="USERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="40" />
        </property>
        <!-- set标签的作用:告知Hibernate在当前一方中关联多方的那个集合对象的名字 -->
        <set name="orderses" inverse="true" >
            <!-- key column 告知hibernate表中的外键是谁 -->
            <key>
                <column name="USER_ID" precision="22" scale="0" unique="true" />
            </key>
            <!--
            one-to-many 这个标签的含义:
            1,告知hibernate当前user与order的关系
               2,告知hibernate当前多方的class标签name的值,获取这个class节点中的table属性的值,这样hibernate就知道当前的
               USER_ID位于哪个表中。
               3,告知bibenrate当前set集中放存放什么对象
             -->
            <one-to-many class="com.puke.domain.Orders" />
        </set>
    </class>
</hibernate-mapping>

Orders配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Orders" table="ORDERS" schema="PUKE12">
        <id name="orderid" type="java.lang.Long">
            <column name="ORDERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="users" class="com.puke.domain.Users" fetch="select">
            <column name="USER_ID" precision="22" scale="0" unique="true" />
        </many-to-one>
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="6" />
        </property>
    </class>
</hibernate-mapping>

一对一的方案2:
一对一的表现形式就是一对一
Users类:
public class Users{
    private Long userid;
    private String username;
    private Orders orders;
}
Orders类:
public class Orders{
private Long orderid;
    private Double price;
    private Users users;
}
配置文件:
Users配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Users" table="USERS" schema="PUKE12">
        <id name="userid" type="java.lang.Long">
            <column name="USERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="40" />
        </property>
        <!-- set标签的作用:告知Hibernate在当前一方中关联多方的那个集合对象的名字 -->
        <one-to-one name="orders" class="com.puke.domain.Orders"></one-to-one>
    </class>
</hibernate-mapping>

Orders配置文件:
<hibernate-mapping>
    <class name="com.puke.domain.Orders" table="ORDERS" schema="PUKE12">
        <id name="orderid" type="java.lang.Long">
            <column name="ORDERID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="users" class="com.puke.domain.Users" fetch="select">
            <column name="USER_ID" precision="22" scale="0" unique="true" />
        </many-to-one>
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="6" />
        </property>
    </class>
</hibernate-mapping>

一对多:
类的写法:
一方:Users
public class Users{
    private Long id;
    private String username;
    private Set<Orders2> orders2s = new HashSet<Orders2>();
}
多方:Orders
public class Orders{
    private Long id;
    private Double price;
    private Users2 users2;
}

配置文件:
一方的配置文件:
<hibernate-mapping>
    <class name="com.puke.domain2.Users2" table="USERS2" schema="PUKE12">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="40" />
        </property>
        <set name="orders2s" inverse="true">
            <key>
                <column name="USERS_ID" precision="22" scale="0" />
            </key>
            <one-to-many class="com.puke.domain2.Orders2" />
        </set>
    </class>
</hibernate-mapping>

多方配置文件:
<hibernate-mapping>
    <class name="com.puke.domain2.Orders2" table="ORDERS2" schema="PUKE12">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="assigned" />
        </id>
        <many-to-one name="users2" class="com.puke.domain2.Users2" fetch="select">
            <column name="USERS_ID" precision="22" scale="0" />
        </many-to-one>
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="6" />
        </property>
    </class>
</hibernate-mapping>

多对多;

目录
相关文章
|
6月前
|
机器学习/深度学习 SQL Java
Hibernate - 多对多关联关系映射
Hibernate - 多对多关联关系映射
60 0
|
11月前
|
Java 数据库连接 数据库
关联关系映射 mybatis中的一对一,一对多关联关系配置及多对多
关联关系映射 mybatis中的一对一,一对多关联关系配置及多对多
45 0
|
Java 数据库连接
hibernate一对多关系操作
hibernate一对多关系操作
167 1
hibernate一对多关系操作
|
XML Java 关系型数据库
hibernate里面的一对多关系映射
hibernate里面的一对多关系映射
111 0
|
缓存 NoSQL Java
hibernate(三) 一对多映射关系
前面两节讲了hibernate的两个配置文件和hello world!。还有hibernate的一级缓存和三种状态,基本上hibernate就懂一点了,从这章起开始一个很重要的知识点,hibernate的关系映射。一对一、一对多、多对多的讲解。,希望你们能从中学到东西,我也从中巩固自己的知识
155 0
|
Java 关系型数据库 数据库连接
Hibernate-ORM:12.Hibernate中的多对多关联关系
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵   一,讲述多对多   多对多的关联关系,比如学生和教师来说,一个学生由多个教师授课...
1272 0
|
Java 关系型数据库 数据库连接
|
XML Java 数据库连接
Hibernate关联关系配置(一对多、一对一和多对多)
第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系。 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多。 多对一:从订单的角度来说多个订单可以对应一个消费者,即为多对一。   一对多关系在hbm文件中的配置信息: 消费者(一方): &lt;?xml version="1.0" encodin
1279 0