`
guimingyue
  • 浏览: 75761 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

hibernate中Map类型的双向一对多映射

    博客分类:
  • Java
阅读更多
 这几天一直在郁闷hibernate中关于Map类型的一对多关系做映射的问题,参照Set的映射貌似可以存储,但是加载的时候就报错了!由于这几天一直呆在家里,用一个仅仅256kb/s的移动TD网卡上网(打开一个网页都要半个小时,而且是按照流量收费的),所以没有上网查,参照动力节点王勇老师讲的Set的映射方法和网上的方法,自己杜撰了一种方法(姑且称为桂式方法),弄了很长时间没弄好,所以只好放弃!今天回学校了,上网认真查了查,再在群里面问了问,总算是把问题基本上解决了!

参照过的觉得最有帮助的一篇文章出处是:http://esffor.iteye.com/blog/168253

有两个类:MapLayer和MapLayerField
package com.hgTIS.webgis.model;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * PointLayer generated by MyEclipse - Hibernate Tools
 */

public class MapLayer  implements java.io.Serializable {

    /**图层id**/
    private Long id;

    /**图层英文名称,动态图层与数据库标明一致,静态图层与图片名称一致**/
     private String name;
     /**图层中文名称**/
     private String chName;
    
     /**是否显示**/
     private String display;
     /**图层叠加次序**/
     private Integer placeOrder;
     /**最小比例等级**/
     private String minScale;
     /**最大比例等级**/
     private String maxScale;
    
     /**图层类型.point/layer/polygon**/
     private String feaType;
     /**图层类型:1动态;2静态;3空间查询;**/
     private String type;
    
     /**坐标系统**/
    private String coordinateSystem;
    /**父类图层ID;静态图层空间查询的时候使用**/
    private MapLayer parentLayer;

    /**必须用的字段**/
    private Map<String,MapLayerField> displayFields =new LinkedHashMap<String, MapLayerField>(0);
    /**分类显示的字段**/
    private String sortField;
/**
    geters and seters
**/
}

MapLayerField.java
package com.hgTIS.webgis.model;


/**
 * 图层字段对象
 */

public class MapLayerField  implements java.io.Serializable {


    /**唯一标识**/
     private Long id;
    
     /**字段名称,一般与数据库字段一致**/
     private String name;
    
     /**中文名称**/
     private String chName;
    
     /**是否系统字段**/
     private String systemField;
    
     /**是否显示字段**/
     private String viewField;
    
     /**是否分类字段**/
     private String sortField;

     /**标题字段**/
     private String titleField;
    
     /**次序**/
     private Integer forder;
 
     private MapLayer mapLayer;

/**
    geters and seters
**/
}

xml文件
MapLayer.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hgTIS.webgis.model.MapLayer" table="mapLayer" >
        <id name="id" type="long">
            <column name="id" />
            <generator class="native"/>
        </id>
        <property name="name" column="name" not-null="true"/>
        <property name="chName" column="chName"/>
        <property name="display" column="display"/>
        <property name="placeOrder" column="placeOrder"/>
        <property name="minScale" column="minScale"/>
        <property name="maxScale" column="maxScale"/>
        <property name="feaType" column="feaType"/>
        <property name="type" column="type"/>
        <property name="coordinateSystem" column="coordinateSystem"/>
        <many-to-one name="parentLayer" column="parentLayerId"/>
        <property name="sortField" column="sortField"/>
        <map name="displayFields" inverse="true" cascade="all">
            <key column="layerid"/>
            <map-key type="string" column="name"/><!--  上面引用的那篇文章说index标签也可以-->
            <one-to-many class="com.hgTIS.webgis.model.MapLayerField"/>
        </map>
    </class>
</hibernate-mapping>

MapLayerField.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hgTIS.webgis.model.MapLayerField" table="mapLayerField" >
        <id name="id" type="long">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" column="name" not-null="true"/>
        <property name="chName" column="chName"/>
        <property name="systemField" column="systemField"/>
        <property name="viewField" column="viewField"/>
        <property name="sortField" column="sortField"/>
        <property name="titleField" column="titleField"/>
        <property name="forder" column="forder"/>
        <many-to-one name="mapLayer" column="layerid"/>
    </class>
</hibernate-mapping>

主要是映射文件中的map标签中的map-key标签一定要与相应的类中的属性一致!
分享到:
评论

相关推荐

    hibernate 双向 多对对,一对多,一对一 映射的 集合

    其次,一对多映射通常用于表示一个实体可以拥有多个子实体的关系,如公司与员工。在Hibernate中,这可以通过`&lt;one-to-many&gt;`标签实现。在父类中,我们定义一个集合类型的属性,对应子类的主键作为外键。而在子类中,...

    hibernate中容器映射技术

    在Hibernate中,Set接口的实现类如HashSet和TreeSet通常用于一对多或多对多的关系映射。例如,一个用户可以有多个订单,订单也可以属于多个用户,这就形成了双向多对多关系。在映射文件中,我们通常使用`&lt;set&gt;`标签...

    Hibernate ORM - 一对多双向连接表关联关系

    虽然描述部分为空,但根据标题,我们可以推断这篇文章可能详细介绍了如何在Hibernate中设置和管理一对多双向关联,包括配置XML映射文件、注解或者使用Java配置,以及如何在代码中处理这种关联关系。 **标签解析:**...

    Hibernate 系列教程 双向多对多

    本教程主要聚焦于Hibernate中的一个复杂关系类型——双向多对多关系。 双向多对多关系是两个实体类之间的一种关联,每个实体都可以拥有多个实例,同时每个实例也可以关联到多个其他实体。这种关系在现实生活中很...

    Hibernate映射解析 七种映射关系 后端 - Java.zip

    与一对多映射相似,只是关系的方向相反,多的一方使用`@ManyToOne`,少的一方不需要额外注解,因为通过外键关联已经可以实现。 4. **多对多映射** (Many-to-Many Mapping) 多个实体可以对应多个其他实体,如学生...

    Hibernate教程16_集合映射

    这在双向一对多或多对多关系中尤为重要,避免出现数据冗余或不一致。 3. **cascade**:这个属性定义了对集合中元素的操作应该如何传播。例如,如果设置为"save-update",那么当父对象被保存或更新时,子对象也会被...

    hibernate集合的映射

    在Hibernate中,集合映射主要用于表示一对多或多对多的关系。例如,一个用户可以有多个订单,这种关系就可以通过集合映射来实现。Hibernate提供了多种集合类型,如List、Set、Map等,它们分别对应于数据库中的数组、...

    Hibernate+中文文档

    21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...

    Hibernate中文详细学习文档

    21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...

    Hibernate one-to-many / many-to-one关系映射

    在Hibernate的hbm.xml文件中,一对一关系通过标签,一对多关系通过、、&lt;map&gt;或标签来定义。需要详细指定实体类名、主键列名以及关联的外键列名。 2. 注解配置: 在实体类上直接使用@OneToOne、@OneToMany等注解进行...

    hibernate3.2中文文档(chm格式)

    21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...

    Hibernate4(关系映射-事务-原理-性能和二级缓存-最佳实践)

    关系的数据库表示可以分为一对一、一对多和多对多三种类型。例如,一个部门表和一个部门主管表之间是一对一关系,而一个部门表和下属人员表之间则是一对多关系。对象表示方面,对象关系分为单向和双向。双向关系意味...

    hibernate_reference中文文档.pdf

    - **7.5.1 一对多 (one to many)/多对一 (many to one)**:说明使用连接表的双向一对多/多对一关联映射。 - **7.5.2 一对一 (one to one)**:介绍使用连接表的双向一对一关联映射。 - **7.5.3 多对多 (many-to-...

    Hibernate 中文 html 帮助文档

    21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 22.2....

    hibernate源码分析过程

    双向映射可以通过多对一、一对一、一对多关系来实现。 控件映射 Hibernate 的控件映射可以将一个对象的控件属性映射到数据库中。控件映射可以使用 Map 实现动态控件。 继承映射 Hibernate 的继承映射可以将一个...

    Hibernate中文API大全

    组件的属性可以是任意一种Hibernate类型(包括集合, 多对多关联, 以及其它组件等等)。嵌套组件不应该被当作一种特殊的应用(Nested components should not be considered an exotic usage)。 Hibernate倾向于支持...

    Hibernate电子书(全)

    在关系数据库中,集合类型的数据(如Set、List、Map)不能直接存储,而Hibernate提供了将这些集合类型映射到数据库中的机制,如使用`Set`和`Map`映射关联关系,这使得Java对象的集合属性可以直接与数据库中的记录...

    hibernate对应关系详解

    5. **双向关系**:在一对一、一对多、多对一、多对多关系中,都可以设置双向关系,即双方都能访问到对方。这需要在双方实体上都添加相应的注解,并确保关系的维护一致性。 6. **继承关系映射**:Hibernate支持类的...

    hibernate 多对多操作

    在多对多映射中,这两个标签用于定义关系的一端,它们包含属性如inverse(反向),cascade(级联操作),fetch(加载策略)等。 4. **中间表与关联表**: 在多对多关系中,通常需要一个中间表来存储两个实体的主键,...

    HibernateAPI中文版.chm

    21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...

Global site tag (gtag.js) - Google Analytics