Hibernate 配置文件属性之 级联操作cascade 性能优化inverse
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.sasa.domain"> <class name="Category" table="category"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="c_name"></property> <property name="descr"></property> <property name="create_tm"></property> <!-- name属性:集合属性名 column属性: 外键列名 class属性: 与我关联的对象完整类名 --> <!-- 级联操作: cascade save-update: 级联保存更新 delete:级联删除 all:save-update+delete 级联操作: 简化操作.目的就是为了少些两行代码. --> <!-- inverse属性: 配置关系是否维护. true: customer不维护关系 false(默认值): customer维护关系 inverse属性: 性能优化.提高关系维护的性能. 原则: 无论怎么放弃,总有一方必须要维护关系. 一对多关系中: 一的一方放弃.也只能一的一方放弃.多的一方不能放弃. --> <set name="products" cascade="save-update" inverse="true"> <key column="category_id"></key> <one-to-many class="Product"/> </set> </class> </hibernate-mapping>
@Test //新增类别和产品 public void addCategorysCascade(){ Session session = HibernateUtils.getCurrentSession(); Transaction tran = session.beginTransaction(); //======================================== Category category = new Category(); category.setC_name("电子产品"); category.setDescr("电子产品1"); Product p1 = new Product(); p1.setPname("手机"); p1.setPrice(100.00); Product p2 = new Product(); p2.setPname("电子手表"); p2.setPrice(90.00); //一对多 category.getProducts().add(p1); category.getProducts().add(p2); //多对一 //p1.setCategory(category); //p2.setCategory(category); session.save(category); //========================================== tran.commit(); session.close(); }