`
iamlibo
  • 浏览: 69273 次
社区版块
存档分类
最新评论

Hibernate Cascade 和 inverse

阅读更多

今天又深入了了解和测试了一下Hibernate cascade 和 inverse 。

Inverse

在Hibernate annotation 中inverse 默认值是"true" 当配置了mappedBy="…"时就相当于inverse="false"了。

Cascade

CascadeType类中有这样几个常量,ALL、PERSIST、MERGE、REFRESH、REMOVE

让代码说话吧:

@Entity

@Table(name = "Users")

public class User implements java.io.Serializable {

 

 

    private String id;

 

    private Rose rose;

 

    public User() {

    }

 

    @Id

    @Column(name = "Id", unique = true, nullable = false, insertable = true, updatable = true, length = 5)

    public String getId() {

        return this.id;

    }

 

    public void setId(String id) {

        this.id = id;

    }

 

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY)

    @JoinColumn(name = "Roseid", unique = false, nullable = false, insertable = true, updatable = true)

    public Rose getRose() {

        return this.rose;

    }

 

    public void setRose(Rose rose) {

        this.rose = rose;

    }

}

 

@Entity

@Table(name = "Rose")

public class Rose implements java.io.Serializable {

 

    private String id;

 

    private Set<User> users = new HashSet<User>(0);

 

    public Rose() {

    }

 

    @Id

    @Column(name = "Id", unique = true, nullable = false, insertable = true, updatable = true, length = 3)

    public String getId() {

        return this.id;

    }

 

    public void setId(String id) {

        this.id = id;

    }

 

    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER )

    @JoinColumn(name="RoseId")

    public Set<User> getUsers() {

        return this.users;

    }

 

    public void setUsers(Set<User> userses) {

        this.users = userses;

    }

 

    public void addUser(User user) {

        user.setRose(this);

        users.add(user);

    }

 

当在user类中配置成cascade = { CascadeType.PERSIST, CascadeType.MERGE } 时,更新和删除两个级联时:

Hibernate: select user_.Id, user_.Enabledel as Enabledel1_, user_.Name as Name1_, user_.Password as Password1_, user_.Roseid as Roseid1_ from ERP.dbo.Users user_ where user_.Id=?

Hibernate: select rose_.Id, rose_.Enabledel as Enabledel0_, rose_.Name as Name0_, rose_.Parent as Parent0_ from ERP.dbo.Rose rose_ where rose_.Id=?

Hibernate: delete from ERP.dbo.Users where Id=?

可以正常删除!但是代码要这样写:

 

         User user =new User("adm");

         user.setRose(new Rose("adm"));    //这句不加就不能删除,提示错误。除非数据库不加级联限制

        userDao.delete(user);

 

当在user类中配置成cascade = { CascadeType.ALL } or cascade={} 时,无法删除。

 

更新时也类似于这种情况,注意rose类中的addUser(User user)方法。

 

再有fetch = FetchType.EAGER在这里不是延时加载,如果设置成LAZY,在取得数据时怎么做好呢?看其他论坛的方法各有好处也有不好的地方,在找一个更方法。。。

分享到:
评论

相关推荐

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade与inverse属性详解

    Hibernate中cascade和inverse应用

    在 Hibernate 框架中,`cascade` 和 `inverse` 是两个重要的概念,它们主要用于管理对象之间的持久化关系,特别是涉及到一对一(one-to-one)、一对多(one-to-many)和多对多(many-to-many)关系时。这两个属性都...

    hibernate 级联(cascade和inverse)一对多

    在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...

    hibernate inverse和cascade的详细讲解

    ### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    关联映射cascade,inverse讲解

    通过阅读和实践这些代码,你可以更深入地理解Hibernate的关联映射,掌握cascade和inverse的实际应用技巧。 总之,理解并熟练运用Hibernate的关联映射、cascade和inverse是提升Java持久化编程能力的关键步骤。它们...

    inverse和cascade使用阐述

    在IT领域,"inverse"和"cascade"是两个常见的概念,尤其在数据库设计、软件工程以及数据处理中。这两个术语通常与关系型数据库中的外键约束、对象关系映射(ORM)工具,以及某些编程框架的特性相关。下面将详细阐述这...

    hibernate集合映射inverse和cascade详解.txt

    `inverse`和`cascade`属性是Hibernate集合映射中非常重要的概念,它们帮助开发者更灵活地控制实体之间的关系以及操作的级联行为。合理地使用这两个属性,不仅可以简化代码,还能提高程序的性能和健壮性。然而,不当...

    关于cascade和inverse属性[文].pdf

    在软件网络技术领域,尤其是在使用Hibernate这种对象关系映射(ORM)框架时,理解和正确使用`cascade`和`inverse`属性至关重要。这两个属性主要用于管理对象之间的关联关系,特别是如何在数据库中维护这些关系。 ...

    Hibernate中Inverse和Cascade的区别.html

    Hibernate中Inverse和Cascade的区别.html

    hibernate_配置cascade_及all-delete-orphan.doc

    在使用Hibernate时,正确选择和配置cascade选项对于高效地管理和维护实体之间的关系至关重要。通过了解不同选项的特点和应用场景,开发人员可以更加灵活地应对各种业务需求,同时也能够有效地避免潜在的数据一致性...

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    `inverse`属性是Hibernate中用于控制关联维护权的重要参数,它的主要作用在于确定关联关系的更新和删除操作由哪一方负责。默认情况下,关联的维护权在"多"端,即子实体,这意味着当子实体发生变化时,如增加、删除或...

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    Hibernate开发租房系统2 源码

    描述提到“使用cascade和inverse优化区和街道关联关系”,这意味着我们将深入理解Hibernate的cascade和inverse属性,以及它们在双向一对多关联关系中的应用。 Hibernate是Java领域中广泛使用的对象关系映射(ORM)...

    Hibenate cascade

    在Hibernate中,`cascade`和`inverse`是两个重要的概念,它们涉及到对象之间的关系管理和数据持久化。 **1. Hibernate Cascade** `cascade`属性主要用于控制对象间的级联操作。当在主对象上执行保存、更新、删除等...

    hibernate

    根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...

    Hibernate常见问题

    理解并正确使用Hibernate的`cascade`和`inverse`属性对于优化数据操作和避免数据一致性问题至关重要。在实际开发中,应根据业务逻辑和数据模型谨慎设定这些属性,以确保数据操作的正确性和高效性。

    inverse 例子

    在Hibernate这个强大的对象关系映射(ORM)框架中,`inverse`属性是一个非常重要的概念,它主要用于管理关联关系的维护责任。在这个例子中,我们将会深入理解`inverse`属性的作用,并通过一个简单的测试案例——`...

Global site tag (gtag.js) - Google Analytics