无法保存中间表关系数据的解决方法

有这样一个多对多关系,一个老师任多门课程,一个课程有多门老师

我的课程hbm文件定义如下

< hibernate-mapping >
  
< class  table ="class"  name ="cn.hxex.exam.model.Classes" >
    
< id  name ="id"  column ="id" >
      
< generator  class ="uuid.hex" ></ generator >
    
</ id >
    
< property  name ="title"  column ="title" />
 
    
< set  name ="teachers"  table ="teacher_class"   lazy ="true"  cascade ="all" >
      
< key  column ="class_id" ></ key >
      
< many-to-many  class ="cn.hxex.exam.model.Teacher"  column ="teacher_id" ></ many-to-many >
    
</ set >
    
    
< set  name ="students"  inverse ="true" >
      
< key  column ="class_id" ></ key >
      
< one-to-many  class ="cn.hxex.exam.model.Student" ></ one-to-many >
    
</ set >
    
    
  
</ class >
  
< query  name ="getTeacherNotInClasses" >
       
<![CDATA[ from Classes where id not in (select t.classes.id from Teacher t where t.id=:teacherid) ]]>
  
</ query >
  
< query  name ="getClassesByTitle" > <![CDATA[ from Classes where title=:title ]]> </ query >
</ hibernate-mapping >

 我在维护课程的老师的时候,采用的是过去持久话的Classes对象,更新其中Set Teacher实现,代码如下:

 

public  ActionForward saveteacher(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
throws  IOException,ServletException {
        ClassesForm classes
=(ClassesForm)form;
        ClassesDAO dao
=(ClassesDAO)DAOFactory.getDao(ClassesDAO.class);
        Classes c
=(Classes)dao.findById(classes.getId(), false);
        
if(c!=null){
            c.getTeachers().clear();
            String[] tids
=request.getParameterValues("inteachers");
            
if(tids!=null&&tids.length>0){
                TeacherDAO teacherDao
=(TeacherDAO)DAOFactory.getDao(TeacherDAO.class);
                
for(int i=0;i<tids.length;i++){
                    Teacher t
=(Teacher)teacherDao.findById(tids[i], false);
                    c.getTeachers().add(t);
                }

            }

            addMessage(request,
"classes.msg.teacher.success");
        }

        
        
        
return l

 

也就是说,从Classes这一方去维护Teacher-classes的关系,结果中间表teacher-class不能保存关系数据,这是为什么呢?仔细检查,原拉在HBM文件中
<set name="teachers" table="teacher_class"  lazy="true" cascade="all">
      
<key column="class_id"></key>
      
<many-to-many class="cn.hxex.exam.model.Teacher" column="teacher_id"></many-to-many>
    
</set>
多写了,inverse="true" 这说明Classes不去维护Classes和Teacher关系,所以,我通过c.getTeachers().add(t);
等方式去增加课程和教师的关系数据,就不起作用了

我曾经有一个文章,说在1对多关系中,维护关系的一方应该是多方,这样会提高效率,避免插入空值

多对多,我建议是在双方都进行维护,业务上也应该提供这样的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值