`
ghost_away
  • 浏览: 17966 次
文章分类
社区版块
存档分类
最新评论

CascadeType属性

 
阅读更多
@Entity

@Table(name="orders")
public class Order {
//1-m,多的一方为关系维护端,关系维护端负责外键记录的更新,关系被维护端没有权利更新外键记录
private String orderid;
private Float amount;
private Set<OrderItem> items = new HashSet<OrderItem>();

@Id @Column(length=12)
public String getOrderid() {
  return orderid;
}
public void setOrderid(String orderid) {
  this.orderid = orderid;
}
@Column(nullable=false)
public Float getAmount() {
  return amount;
}
public void setAmount(Float amount) {
  this.amount = amount;
}
@OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.REMOVE,CascadeType.MERGE},fetch=FetchType.LAZY,mappedBy="order")//出现mapby为被维护端|||默认为延迟加载
public Set<OrderItem> getItems() {
  return items;
}
public void setItems(Set<OrderItem> items) {
  this.items = items;
}
public void addOrderItem(OrderItem orderItem){
  orderItem.setOrder(this);
  this.items.add(orderItem);
}

}


@Entity
public class OrderItem {
private Integer id;
private String productName;
private Float sellPrice = 0f;
private Order order;

@Id @GeneratedValue
public Integer getId() {
  return id;
}
public void setId(Integer id) {
  this.id = id;
}
@Column(length=40,nullable=false)
public String getProductName() {
  return productName;
}
public void setProductName(String productName) {
  this.productName = productName;
}
@Column(nullable=false)
public Float getSellPrice() {
  return sellPrice;
}
public void setSellPrice(Float sellPrice) {
  this.sellPrice = sellPrice;
}
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},optional=true)
@JoinColumn(name="order_id")
public Order getOrder() {
  return order;
}
public void setOrder(Order order) {
  this.order = order;
}



}



CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据之前就可以调用一下refresh()方法!



CascadeType.REMOVE:级联删除,当调用remove()方法删除Order实体时会先级联删除OrderItem的相关数据!



CascadeType.MERGE:级联更新,当调用了Merge()方法,如果Order中的数据改变了会相应的更新OrderItem中的数据,



CascadeType.ALL:包含以上所有级联属性。



(注:以上几种级联操作,只能实在满足数据库的约束时才能生效,比如上边的Order和OrderItem存在主外键关联所以执行REMOVE()方法时是不能实现级联删除的)

CascadeType.PERSIST:级联保存,当调用了Persist() 方法,会级联保存相应的数据
分享到:
评论

相关推荐

    hibernate的_CascadeType属性说明

    Hibernate的CascadeType属性说明 Hibernate框架中,CascadeType是hibernate的重要属性之一,它控制着实体之间的级联操作。CascadeType是hibernate中的枚举类型,定义了多种级联操作,包括REFRESH、PERSIST、REMOVE...

    详解Hibernate cascade级联属性的CascadeType的用法

    详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) 级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须...

    Hibernate cascade在不同关联关系中的具体表现

    `CascadeType.SAVE_UPDATE`等同于`CascadeType.PERSIST`和`CascadeType.MERGE`,在保存或更新父对象时,会确保子对象也被保存或更新。而`CascadeType.REMOVE`则会在删除父对象时,删除所有关联的子对象。 3. **多对...

    Hibernate映射集合属性List

    同时,我们还可以通过`fetch`属性设置级联操作,如`CascadeType.ALL`会将集合中的所有操作都级联到关联的对象上。 综上所述,Hibernate映射集合属性List是通过注解或XML配置来实现的,它可以简化数据库操作,使代码...

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

    在深入探讨Hibernate集合映射中的`inverse`与`cascade`属性之前,我们首先需要理解Hibernate框架的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供了一种将对象模型与数据库...

    hibernate 级联(cascade和inverse)一对多

    在注解中,没有直接的`inverse`属性,但可以通过`mappedBy`属性实现相同效果: ```java @OneToMany(mappedBy = "parent") ``` 三、JUnit测试 使用JUnit进行测试是验证Hibernate配置和功能的一种常见方法。你可以...

    Hibernate一对一唯一外键关联映射(双向关联)

    根据实际需求,可以选择其他级联类型,如`CascadeType.PERSIST`仅在保存时级联,`CascadeType.REMOVE`仅在删除时级联等。 五、实际应用与注意事项 在实际开发中,一对一关联常用于两个紧密相关的实体,如用户与用户...

    Hibernate的级联操作(增,删,该)

    除了上述常见的级联类型,Hibernate还提供了其他的级联选项,如`CascadeType.REFRESH`用于刷新关联对象的状态,`CascadeType.DETACH`用于断开与Session的关联,以及`CascadeType.HALF`等更复杂的级联行为。...

    hibernate入门学习

    4. 可以通过`cascade`属性设置级联操作,如`CascadeType.ALL`,这将使得对父对象的操作会影响到子对象,如删除用户时,对应的订单也会被删除。 **三、反转关系** 反转关系指的是在一对多关系中,让关联的多方成为...

    hibernate注释源程序

    5. **@Column**: 定义实体属性与数据库列的映射,可以设置列的名称、长度、是否允许为空等属性。 6. **@ManyToOne, @OneToMany, @OneToOne, @ManyToMany**: 这些注解用于定义对象间的关联关系,例如一对一、一对多...

    Hibernate一对多映射配置详解

    `name`属性指定了关联属性名,`column`属性指定了外键列名,`class`属性指定了关联类的全限定名,`cascade`属性则用于指定级联操作。 ```xml &lt;!-- Account的配置 --&gt; ``` 2. 双向关联 双向关联意味着两个实体都...

    jpa to many

    在这个例子中,`ParentEntity`与`ChildEntity`之间是一对多的关系,`ParentEntity`的`children`属性引用了`ChildEntity`的实例,而`ChildEntity`的`parent`属性则引用了`ParentEntity`的实例。级联操作的配置使得在...

    Hibernate注释大全收藏

    `cascade`属性接受`CascadeType`数组,其类型包括: - `CascadeType.PERSIST`: 级联创建操作。 - `CascadeType.MERGE`: 级联合并操作。 - `CascadeType.REMOVE`: 级联删除操作。 - `CascadeType.REFRESH`: 级联刷新...

    hibernate常见异常针对于jpa

    - `mappedBy`属性用于指定另一端的关联属性,它决定了关联关系的维护方。如果双方都声明了关联关系,则会导致不必要的数据更新操作。 #### 五、不需要持久化的属性加@Transient 在某些情况下,可能希望将某些属性...

    一对一双向映射例

    `Person`实体代表人,包含`personid`(个人ID)、`name`(姓名)、`sex`(性别)和`age`(年龄)属性,还有一个`idcard`属性,它与`IDCard`实体相关联。 在`IDCard`类中,`@OneToOne`注解被用来指定与`Person`的...

    03-HQL实用技术.pdf

    - 常见值有`CascadeType.PERSIST`、`CascadeType.MERGE`、`CascadeType.REMOVE`等。 - **inverse属性**: - 指定哪一方负责维护关联关系。 - 通常在多对一或一对多的关联中,inverse属性被设置为`true`的一方负责...

    hibernate 关系注解

    双向一对一关系需要在两个实体类中都使用`@OneToOne`,一方使用`mappedBy`属性引用另一方的属性。例如: ```java // 在User类中 @OneToOne(mappedBy="user") private Profile profile; // 在Profile类中 @...

    hibernate常用注解

    `cascade`属性可以指定级联操作,例如`CascadeType.ALL`表示所有操作都会被级联执行。 - **@ManyToOne**:表示多对一的关联关系,用于表示实体之间的引用。`@JoinColumn`注解可以显式指定关联的列名和约束。 - **@...

    hibernate的一对一

    此外,还可以设置`fetch`属性来控制加载策略,例如`FetchType.LAZY`表示延迟加载,只有在真正访问`profile`属性时才会加载关联的`Profile`对象。 除了显式定义外键外,还可以使用`@PrimaryKeyJoinColumns`注解,当...

Global site tag (gtag.js) - Google Analytics