查询
直接查询即可 普通方式
删除
第一种:删除外键后 删除
Session session = HibernateUtils.openSession();
session.getTransaction().begin();
//查询一个用户
Customer customer= (Customer)session.get(Customer.class, 1);
//因为数据库中有外键约束 所以不能使用session.delete方法直接删除
//可以将订单类中的外键设置为空之后删除
for(Order order:customer.getOrders()){
order.setCustomer(null);
}
session.delete(customer);
session.getTransaction().commit();
session.close();
第二种方式 设置级联方式(cascade)
save-update:级联保存,级联修改
将顾客和订单绑定之后 只需保存顾客 订单也会相应保存 修改也会同步修改
<set name="orders" inverse="true" cascade="save-update">
<!-- 填写Order表中的外键-->
<key column="customer_id" ></key>
<one-to-many class="org.ccit.com.domain.Order"></one-to-many>
</set>
delete:级联删除 直接删除顾客 对应的订单也会被删除
<set name="orders" inverse="true" cascade="delete">
<!-- 填写Order表中的外键-->
<key column="customer_id" ></key>
<one-to-many class="org.ccit.com.domain.Order"></one-to-many>
</set>
delete-orphan:孤儿删除 接触顾客和订单的关系 将订单删除 保存顾客
<set name="orders" inverse="true" cascade="delete-orphan,save-update">
<!-- 填写Order表中的外键-->
<key column="customer_id" ></key>
<one-to-many class="org.ccit.com.domain.Order"></one-to-many>
</set>
Session session = HibernateUtils.openSession();
session.getTransaction().begin();
//查询一个用户
Customer customer= (Customer)session.get(Customer.class, 1);
//获取顾客订单
Set<Order> orders = customer.getOrders();
//获取迭代器
Iterator<Order> it=orders.iterator();
while(it.hasNext()){
it.next();
it.remove();//移除订单 维护关系
}
session.getTransaction().commit();
session.close();
注:级联组合
1,可以使用逗号隔开
<set name="orders" inverse="true" cascade="delete-orphan,save-update,delete">
<!-- 填写Order表中的外键-->
<key column="customer_id" ></key>
<one-to-many class="org.ccit.com.domain.Order"></one-to-many>
</set>
2, all: save-update 和 delete 整合 all-delete-orphan:delete-orphan,save-update,delete整合
<set name="orders" inverse="true" cascade="all">
<!-- 填写Order表中的外键-->
<key column="customer_id" ></key>
<one-to-many class="org.ccit.com.domain.Order"></one-to-many>
</set>
<set name="orders" inverse="true" cascade="all-delete-orphan">
<!-- 填写Order表中的外键-->
<key column="customer_id" ></key>
<one-to-many class="org.ccit.com.domain.Order"></one-to-many>
</set>