Hibernate 级联

public class Customer 
{
private int id;
private String name;
private Set orders;
}


public class Order
{
private int id;
private String name;
private Customer customer;
}



[color=red]Customer.hbm.xml[/color]

<hibernate-mapping>
<class name="www.eternal.com.Customer" table="t_customer">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="orders" cascade="all">
<key column="customer_id"></key>
<one-to-many class="www.eternal.com.Order"/>
</set>
</class>
</hibernate-mapping>


[color=red]Order.hbm.xml[/color]

<hibernate-mapping>
<class name="www.eternal.com.Order" table="t_orders">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="customer">
<column name="customer_id"/>
</many-to-one>
</class>
</hibernate-mapping>
Hibernate 中的级联操作可以通过注解(Annotation)或 XML 配置文件进行设置。在实体类中,通过 `cascade` 属性指定级联行为,并结合关联关系(如 `@OneToMany`, `@ManyToOne`, `@OneToOne` 等)实现级联操作。 以下是一个典型的使用注解配置 Hibernate 级联操作的示例: ```java @Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String orderNumber; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> items = new ArrayList<>(); // getters and setters } ``` ```java @Entity public class OrderItem { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productName; @ManyToOne @JoinColumn(name = "order_id") private Order order; // getters and setters } ``` 在上述代码中,`Order` 实体与 `OrderItem` 实体之间建立了一对多的关系,并通过 `cascade = CascadeType.ALL` 指定了所有操作都会级联执行[^1]。 如果需要配置特定的级联行为,例如仅在保存或更新时进行级联操作,则可以将 `cascade` 的值更改为 `CascadeType.SAVE_UPDATE`: ```java @OneToMany(mappedBy = "order", cascade = CascadeType.SAVE_UPDATE) private List<OrderItem> items; ``` 此外,也可以通过 XML 文件定义级联行为。在 `hbm.xml` 文件中,可以在 `<set>` 或 `<list>` 标签中添加 `cascade` 属性: ```xml <set name="items" cascade="all"> <key column="order_id"/> <one-to-many class="OrderItem"/> </set> ``` ### 常见的级联类型包括: - **ALL**:所有操作都会级联执行。 - **NONE**:不进行级联操作。 - **SAVE_UPDATE**:在保存或更新操作时级联执行。 - **DELETE**:在删除操作时级联执行。 - **DELETE_ORPHAN**:在删除操作时级联执行,并且删除孤立的对象。 - **ALL_DELETE_ORPHAN**:所有操作都会级联执行,并且删除孤立的对象[^1]。 ### 注意事项: - 在配置级联操作时,应确保数据库表之间的外键约束正确设置,以避免数据一致性问题。 - 使用懒加载机制时,注意在 Session 关闭之前访问关联数据,否则会抛出异常[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值