@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中的枚举类型,定义了多种级联操作,包括REFRESH、PERSIST、REMOVE...
详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) 级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须...
`CascadeType.SAVE_UPDATE`等同于`CascadeType.PERSIST`和`CascadeType.MERGE`,在保存或更新父对象时,会确保子对象也被保存或更新。而`CascadeType.REMOVE`则会在删除父对象时,删除所有关联的子对象。 3. **多对...
同时,我们还可以通过`fetch`属性设置级联操作,如`CascadeType.ALL`会将集合中的所有操作都级联到关联的对象上。 综上所述,Hibernate映射集合属性List是通过注解或XML配置来实现的,它可以简化数据库操作,使代码...
在深入探讨Hibernate集合映射中的`inverse`与`cascade`属性之前,我们首先需要理解Hibernate框架的基本概念。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供了一种将对象模型与数据库...
在注解中,没有直接的`inverse`属性,但可以通过`mappedBy`属性实现相同效果: ```java @OneToMany(mappedBy = "parent") ``` 三、JUnit测试 使用JUnit进行测试是验证Hibernate配置和功能的一种常见方法。你可以...
根据实际需求,可以选择其他级联类型,如`CascadeType.PERSIST`仅在保存时级联,`CascadeType.REMOVE`仅在删除时级联等。 五、实际应用与注意事项 在实际开发中,一对一关联常用于两个紧密相关的实体,如用户与用户...
除了上述常见的级联类型,Hibernate还提供了其他的级联选项,如`CascadeType.REFRESH`用于刷新关联对象的状态,`CascadeType.DETACH`用于断开与Session的关联,以及`CascadeType.HALF`等更复杂的级联行为。...
4. 可以通过`cascade`属性设置级联操作,如`CascadeType.ALL`,这将使得对父对象的操作会影响到子对象,如删除用户时,对应的订单也会被删除。 **三、反转关系** 反转关系指的是在一对多关系中,让关联的多方成为...
5. **@Column**: 定义实体属性与数据库列的映射,可以设置列的名称、长度、是否允许为空等属性。 6. **@ManyToOne, @OneToMany, @OneToOne, @ManyToMany**: 这些注解用于定义对象间的关联关系,例如一对一、一对多...
`name`属性指定了关联属性名,`column`属性指定了外键列名,`class`属性指定了关联类的全限定名,`cascade`属性则用于指定级联操作。 ```xml <!-- Account的配置 --> ``` 2. 双向关联 双向关联意味着两个实体都...
在这个例子中,`ParentEntity`与`ChildEntity`之间是一对多的关系,`ParentEntity`的`children`属性引用了`ChildEntity`的实例,而`ChildEntity`的`parent`属性则引用了`ParentEntity`的实例。级联操作的配置使得在...
`cascade`属性接受`CascadeType`数组,其类型包括: - `CascadeType.PERSIST`: 级联创建操作。 - `CascadeType.MERGE`: 级联合并操作。 - `CascadeType.REMOVE`: 级联删除操作。 - `CascadeType.REFRESH`: 级联刷新...
- `mappedBy`属性用于指定另一端的关联属性,它决定了关联关系的维护方。如果双方都声明了关联关系,则会导致不必要的数据更新操作。 #### 五、不需要持久化的属性加@Transient 在某些情况下,可能希望将某些属性...
`Person`实体代表人,包含`personid`(个人ID)、`name`(姓名)、`sex`(性别)和`age`(年龄)属性,还有一个`idcard`属性,它与`IDCard`实体相关联。 在`IDCard`类中,`@OneToOne`注解被用来指定与`Person`的...
- 常见值有`CascadeType.PERSIST`、`CascadeType.MERGE`、`CascadeType.REMOVE`等。 - **inverse属性**: - 指定哪一方负责维护关联关系。 - 通常在多对一或一对多的关联中,inverse属性被设置为`true`的一方负责...
双向一对一关系需要在两个实体类中都使用`@OneToOne`,一方使用`mappedBy`属性引用另一方的属性。例如: ```java // 在User类中 @OneToOne(mappedBy="user") private Profile profile; // 在Profile类中 @...
`cascade`属性可以指定级联操作,例如`CascadeType.ALL`表示所有操作都会被级联执行。 - **@ManyToOne**:表示多对一的关联关系,用于表示实体之间的引用。`@JoinColumn`注解可以显式指定关联的列名和约束。 - **@...
此外,还可以设置`fetch`属性来控制加载策略,例如`FetchType.LAZY`表示延迟加载,只有在真正访问`profile`属性时才会加载关联的`Profile`对象。 除了显式定义外键外,还可以使用`@PrimaryKeyJoinColumns`注解,当...