问题:在做一对多级联添加时,我在一方配置文件中配置如下
<set name="setLinkMan" cascade="save-update,delete" inverse="true">
inverse="true"的意思时表示放弃关系维护,当做级联添加时,Hibernate并不会帮我们把多的那方设置外键关联,因此虽然数据都添加到数据库,但是多方外键为空
演示:
客户(一方)配置文件:
<set name="setLinkMan" cascade="save-update,delete" inverse="true">
<key column="clid"></key>
<one-to-many class="com.chao.hbm.entity.LinkMan"/>
</set>
测试代码:
//演示一对多级联保存,简单写法
@Test
public void testAddDemo2() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
//得到sessionFactory
sessionFactory = HibernateUtils.getSessionFactory();
//得到session
session = sessionFactory.openSession();
//开启事务
tx = session.beginTransaction();
//添加一个客户,为这个客户添加一个联系人
//1.创建客户和联系人对象
Customer customer = new Customer();
customer.setCustName("京东");
customer.setCustLevel("vip");
customer.setCustSource("网络");
customer.setCustPhone("332");
customer.setCustMobile("923");
LinkMan linkMan1 = new LinkMan();
linkMan1.setLkm_name("九尾妖狐");
linkMan1.setLkm_gender("女");
linkMan1.setLkm_phone("903");
LinkMan linkMan2 = new LinkMan();
linkMan2.setLkm_name("盖伦");
linkMan2.setLkm_gender("男");
linkMan2.setLkm_phone("933");
customer.getSetLinkMan().add(linkMan1);
customer.getSetLinkMan().add(linkMan2);
//保存客户
session.save(customer);
//提交事务
tx.commit();
} catch (Exception e) {
e.printStackTrace();
if(tx!=null) tx.rollback();
}finally {
session.close();
}
}
演示结果:
解决办法:
将inverse="true"设置成inverse="false";或者直接删除这条语句