首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 开源技术 >> Hibernate >> 正文

Hibernate的映射关联关系


      级联删除就很简单了,把cascade属性设置为delete,如果你删除了一个客户,程序就会先执行删除这个客户全部的订单的SQL语句,然后在删除这个客户,所谓删除一个持久化对象不是在内存中删除这个对象,而是删除数据库中相关的记录,这个对象依然在内存中,只不过由持久化状态转为临时状态,当这个对象的引用消失后,这个对象会被垃圾回收.但是如果我又想级联删除,还想级联保存,更新的时候应该怎么办呢?这个时候我们将cascade属性设置为all-delete-orphan就OK了.非常简单明了.我们还可以通过持久化类的customer.getOrder().rumove(order);解除关联.这里的操作表示获得客户订单的集合对象,然后从集合对象中删除order的订单,其实这种操作的意义不大,当我们不需要的这个订单的时候完全可以删除它,解除关联之后如果设置了级联删除属性,这个无用的记录也是要被删除的.其实解除关联就是把外键设为null.通常我们的外键都要约束不可以为空.
      映射关联还有一种多对多的关联,是一种自身关联关系.就是同一张表.自己和自己的关联.比如说一张人表,地球人是人,美国人,中国人,日本人都属于地球人,中国人有分北京人,山东人.日本人也有下一级的比如东京人.下面设想如果日本人被消灭掉了,那么东京人也应该都被没有了吧,这就是一种关系,自身对自身的关联关系.这就有点类似树的结构了.下面用一个例子演示这种关系,代码来源于孙MM的<<精通Hibernate>>一书.
    public class Category implements Serializable {
    private Long id;
    private String name;
    private Category parentCategory;
    private Set childCategories; [Page]
    public Category(String name, mypack.Category parentCategory, Set childCategories) {
        this.name = name;
        this.parentCategory = parentCategory;
        this.childCategories = childCategories;
    }
    public Category() {
    }
    public Category(Set childCategories) {
        this.childCategories = childCategories;
    }
    public Category getParentCategory() {
        return this.parentCategory;
    }

    public void setParentCategory(Category parentCategory) {
        this.parentCategory = parentCategory;
    }

    public Set getChildCategories() {
        return this.childCategories;
    }

    public void setChildCategories(Set childCategories) {
        this.childCategories = childCategories;
    }
    //为了节省空间省略了id,name属性的访问方法

    }
    <hibernate-mapping >
    <class name=\"mypack.Category\" table=\"CATEGORIES\" >
    <id name=\"id\" type=\"long\" column=\"ID\">
      <generator class=\"increment\"/>
    </id>
    <property name=\"name\" type=\"string\" >
        <column name=\"NAME\" length=\"15\" />
    </property>
    <set
        name=\"childCategories\"

    cascade=\"save-update\"
        inverse=\"true\"
        >
        <key column=\"CATEGORY_ID\" />
        <one-to-many class=\"mypack.Category\" />
     </set>
    <many-to-one
        name=\"parentCategory\"
        column=\"CATEGORY_ID\"
        class=\"mypack.Category\"
       />
    </class>
    </hibernate-mapping>
      我觉得这种方式其实和上边的一对多,一对一关系一样,只不过两个用的都是同一个类罢了.看一下例子理解上应该很简单。

上一页  [1] [2] 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航