zoukankan      html  css  js  c++  java
  • 4.一对多关联映射

    1.实体一对多关联

    一对多联系(1:n)
    定义:
    如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n。
    实例:
    一个班级中有若干名学生,每个学生只在一个班级中学习。

    2.数据库一对多关联

    在关系模型中,只存在外键参照关系,而且是 many 方参照 one 方。

    3.Hibernate单向一对多关联

    在关系模型中,只存在外键参照关系,而且是 many 方参照 one 方。
    public class User {
        private Integer id;
        private String userName;
        private String password;
        private Set orderSet = new HashSet<Order>();
        ......
    }
    
    public class Order {
        private Integer id; 
        private Double price; // 价格
        ......
    }
    映射配置文件
    在 User.hbm.xml 文件中使用 <set>元素配置。
    
    <set name="orderSet" cascade="delete">
        <key column="USERID"/>
        <one-to-many class="Order" />
    </set>
    <set>元素属性:
    name属性:指定要映射的属性名;
    cascade级联操作属性:save-update、delete、all、none。
    <set>元素的子元素:
    <key>元素:column 属性设定所关联类对应表的外键;
    <one-to-many>元素:class 属性设定所关联的类。
    在表示一对多关联关系时,还可以使用 List 和 Map 来表示引用集合。
    public class User {
        private Integer id;
        private String userName;
        private String password;
        private List orderList = new ArrayList<Order>();      
        ……
    }

    使用 List 映射时,需要在 Order 表中添加一个额外字段 (ORDERINDEX) 来表示插入顺序。

    在User.hbm.xml文件中使用 <list>元素配置。

    <list name="orderList" cascade="delete">
    <key column="USERID"/>
    <index column="ORDERINDEX"/>
    <one-to-many class="Order" />
    </list>

    <index>子元素:
    column 属性:指定 ORDER 表中记录插入顺序的列名。

    使用 Map 映射时,需要在 Order 表中添加一个额外字段 (ORDERKEY) 来记录 Map 的 key 值。
    <map name="orderMap" cascade="delete">
        <key column="USERID"/>
        <index column="ORDERKEY" type="string"/>
        <one-to-many class="Order" />
    </map>

    <index>子元素:
    column 属性:指定记录 Map 中 key 值得字段名。
    type 属性:指定 Map 中 key 值的类型(不可缺省)。

     

    4.Hibernate 双向一对多关联

    建立 User 和 Order 的双向一对多关联。
    在 User 到 Order 单向一对多关联关系基础上,在 Order 类中增加 User 类型的属性。
    
    public class Order {
        private Integer id; 
        private Double price; // 价格
        private User user;
        ......
    }
    Order.hbm.xml 中添加 user 属性的映射。
    <many-to-one name="user" column="USERID" class="User"/> 
    <many-to-one>元素的属性:
    name 属性:指定需映射的属性名;
    column 属性:指定ORDER中的外键列名;
    class 属性:指定所关联的类型。

    使用注解映射一对多关联:

    在 many 方 Order类 的 getUser() 方法上配置。
    @ManyToOne
    @JoinColumn(name="USERID")
    public User getUser() {
        return user;
    }
    
    @JoinColumn(name = "USERID") : 指定 ORDER 表中的外键列名。
    在 one 方 User类 的 getOrderSet() 方法上配置。
    @OneToMany(mappedBy="user", targetEntity=Order.class, 
            cascade=CascadeType.ALL)
    public Set getOrderSet() {
        return orderSet;
    }
    
    mappedBy:表明是双向关联关系,并且与 user 建立对应。
    targetEntity:指定了所关联的类型。
    cascade:指定级联操作。
  • 相关阅读:
    如何使用angularjs实现文本框设置值
    如何使用angularjs实现文本框获取焦点
    electron的安装
    linux中升级jdk的方法
    linux中添加开机自启服务的方法
    liunx系统安装tomcat的方法
    liunx系统安装jdk的方法
    常用linux命令
    ResourceBundle的使用
    查看Linux系统版本的命令
  • 原文地址:https://www.cnblogs.com/Firesun/p/9844580.html
Copyright © 2011-2022 走看看