• Hibernate集合映射


    可以在Hibernate中映射持久类的集合元素。 您需要从以下类型之一声明持久类中的集合类型:

    • java.util.List
    • java.util.Set
    • java.util.SortedSet
    • java.util.Map
    • java.util.SortedMap
    • java.util.Collection
    • 或写入org.hibernate.usertype.UserCollectionType的实现

    持久化类应该像这样定义为collection元素,如下代码示例 -

    package com.yiibai;  
    
    import java.util.List;  
    
    public class Question {  
    private int id;  
    private String qname;  
    private List<String> answers;//List can be of any type  
    
    //getters and setters  
    
    }
    
    Java

    映射文件中的映射集合

    有很多<class>元素的子元素用来映射集合。 它们是<list><bag><set><map>。 下面来看看看如何实现上述类的列表:

    <class name="com.yiibai.Question" table="q100">  
    <id name="id">  
    <generator class="increment"></generator>  
    </id>  
    <property name="qname"></property>  
    
    <list name="answers" table="ans100">  
    <key column="qid"></key>  
    <index column="type"></index>  
    <element column="answer" type="string"></element>  
    </list>  
    
    </class>
    
    XML

    列表中使用了三个子元素:

    • <key>元素用于根据Question类标识符定义该表中的外键。
    • <index>元素用于标识类型。List 和 Map是索引集合。
    • <element>用于定义集合的元素。

    这是集合存储字符串对象的映射。 但是如果集合存储实体引用(另一个类对象),我们需要定义<one-to-many><many-to-many>元素。 现在,持久化类将如下所示:

    package com.yiibai;  
    
    import java.util.List;  
    
    public class Question {  
    private int id;  
    private String qname;  
    private List<Answer> answers;//Here, List stores the objects of Answer class  
    
    //getters and setters  
    
    }
    
    Java

    Answer类代码示例如下 -

    package com.yiibai;  
    import java.util.List;  
    public class Answer {  
    private int id;  
    private String answer;  
    private String posterName;  
    //getters and setters  
    }
    
    Java

    现在映射文件将是:

    <class name="com.yiibai.Question" table="q100">  
        <id name="id">  
            <generator class="increment"></generator>  
        </id>  
        <property name="qname"></property>  
    
        <list name="answers" >  
            <key column="qid"></key>  
            <index column="type"></index>  
            <one-to-many class="com.yiibai.Answer" />  
        </list>  
    
    </class>
    
    XML

    这里,列表被一对多关系映射。 在这种情况下,一个问题可以有很多答案。

    key元素

    key元素用于根据原始身份在连接的表中定义外键。 外键元素默认为空。 所以对于不可空的外键,需要指定not-null属性,如:

    <key column="qid" not-null="true" ></key>
    
    XML

    key元素的属性是columnon-deleteproperty-refnot-nullupdateunique

    <key  
        column="columnname"  
        on-delete="noaction|cascade"  
        not-null="true|false"  
        property-ref="propertyName"  
        update="true|false"  
        unique="true|false"  
    />
    
    XML

    索引集合

    集合元素可以分为两种形式:

    • 索引,和
    • 非索引

    List 和 Map集合都可被索引,而集合和行集合是非索引的。 这里,索引收集 List 和 Map需要一个额外的元素<index>

    集合元素

    集合元素可以具有值或实体引用(另一个类对象)。可以使用4个元素之一。

    • element
    • component-element
    • one-to-many, 或
    • many-to-many

    element 和 component-element 用于正常值,例如stringint等,而一对多和多对多用于映射实体引用。

    在接下来的文章,我们将学习集合映射。

    映射列表(List)
    在这个例子中,我们将映射List元素。

    映射Bag
    在这个例子中,我们将使用Hibernate框架的包集合。

    映射集合(Set)
    在这里,我们将映射Set的集合元素。

  • 相关阅读:
    【转】职场中如何才能学会心理自控
    Gof《设计模式》完结
    阿里巴巴CEO马云最新超经典哲学语录
    大话设计模式感悟(3)——策略模式(Strategy)
    设计模式 ( 十三 ) 命令模式Command(对象行为型)
    数据结构&算法实践Python——序章
    设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
    设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
    金融系列2《借贷记卡应用》
    php 设计模式数据映射模式(应用程序与数据库交互模式)
  • 原文地址:https://www.cnblogs.com/borter/p/9522305.html
Copyright © 2020-2023  润新知