一开始把cascade属性写在“一”的一侧:
<set name="EmployeeSet" inverse="true" >
<key column="cid" >
</key>
<one-to-many class="com.cjx.entity.Employee" cascade= "all" inverse =“true” />
</set>
测试类中:
@Test public void DemoAdd() { Session session = null; Transaction tx = null; try{ session = HibernateSessionFactory.getSessionObject(); tx = session.beginTransaction(); Company company = new Company(); company.setCname("ali"); company.setPhone("1231111"); Employee employee = new Employee(); employee.setEname("cjx"); employee.setEphone("13610233"); //这句是重点 company.getEmployeeSet(employee); session.save(company); tx.commit(); }catch(Exception e) {} }
后来发现级联失效了,原来inverse会导致cascade失效
应该写在“多”的那边!
<class name="com.cjx.entity.Employee" table="t_employee">
<id name="eid" column="eid">
<generator class="native"></generator>
</id>
<property name="ename" column="ename"></property>
<property name="ephone" column="ephone"></property>
<many-to-one name="company" class="com.cjx.entity.Company" column="cid" cascade="all"></many-to-one>
</class>
测试类也要改:
@Test
public void DemoAdd() {
Session session = null;
Transaction tx = null;
try{
session = HibernateSessionFactory.getSessionObject();
tx = session.beginTransaction();
Company company = new Company();
company.setCname("ali");
company.setPhone("1231111");
Employee employee = new Employee();
employee.setEname("cjx");
employee.setEphone("13610233");
//加了inverse后要加这个
employee.setCompany(company);
session.save(employee);
tx.commit();
}catch(Exception e) {}
}