首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

数据库表多对多有关问题(跪求)

2013-07-08 
数据库表多对多问题(跪求)教师可以教多门专业, 专业可以被多个教师教,其中数据库设计为三张表,分别为教师

数据库表多对多问题(跪求)
教师可以教多门专业, 专业可以被多个教师教,其中数据库设计为三张表,分别为教师表、专业表、教师和专业的关联表,其中关联表中包含教师号和专业号,分别参照教师表和专业表,现在想实现的功能是加入教师信息和专业信息,可以保存教师教的专业是什么,该如何向关联表插入数据,将教师和专业关联起来?
[解决办法]
教师表   TID   教师信息
专业表   CID   专业信息
关联表   TID   CID
[解决办法]
加个中间表,将多对多的主键串起来...同意一楼
[解决办法]
在教师表增加set<专业>,在专业增加set<教师> hibernate配置成多对多。
[解决办法]

引用:
教师可以教多门专业, 专业可以被多个教师教,其中数据库设计为三张表,分别为教师表、专业表、教师和专业的关联表,其中关联表中包含教师号和专业号,分别参照教师表和专业表,现在想实现的功能是加入教师信息和专业信息,可以保存教师教的专业是什么,该如何向关联表插入数据,将教师和专业关联起来?
  

无需插入额外的数据,现有的已经够了


教师表 T_TEACHER 专业表T_MAJOR 教师和专业的关联表 T_TEACHER_MAJOR
T_TEACHER(TID,TNAME,TAGE....,TS);
T_MAJOR(MID,MNAME,MDESC....,TS);
T_TEACHER_MAJOR(TID,MID,TS);



教师教的专业是什么:
SELECT T_TEACHER_MAJOR.TID,T_TEACHER.TNAME,T_TEACHER_MAJOR.MID,T_MAJOR.MNAME
   FROM T_TEACHER_MAJOR,T_TEACHER,T_MAJOR
   WHERE T_TEACHER_MAJOR.TID = T_TEACHER.TID
      AND T_TEACHER_MAJOR.MID = T_MAJOR.MID;


如果确实需要一个“表”,把上面的sql做成视图
[解决办法]
用个中间表存放多对多表的主键值关联
[解决办法]

<class name="Teacher">
    <id name="id" column="TID">
        <generator class="native"/>
    </id>
    <set name="majors"  table="Teacher_Major">
        <key column="TeacherId"/>
        <many-to-many column="MajorId"
            class="Major"/>
    </set>


</class>

<class name="Major">
    <id name="id" column="MID">
        <generator class="native"/>
    </id>
    <set name="techers" inverse="true"  table="Teacher_Major">
        <key column="MajorId"/>
        <many-to-many column="TeacherId"
            class="Teacher"/>
    </set>
</class>


[解决办法]
<class name="Teacher"> 
   <id name="id" column="TID">    
    <generator class="native"/>    </id> 
   <set name="majors"  table="Teacher_Major" inverse="false">   
     <key column="TeacherId"/>    
    <many-to-many column="MajorId"         
   class="Major"/>   
 </set></class>
public class Teacher {
private int TID;
private List<Major> majors = new ArrayList<Major>();
}

public class Major {
private int MID;
private List<Major> majors = new ArrayList<Major>();
}




还有什么属性自己加,配置文件里也有加,类中加get set方法

测试这样就行了:
List<Major> majors = new ArrayList<Major>();
Major m = new Major();
majors.add(m); 
Teather t =  new Teacher();
t.setMajors(majors);
//这有什么属性往里set就行了
session.save(t);
[解决办法]

public class Teacher { 
   private int TID;   
 private List<Major> majors ;}
 public class Major {  
  private int MID; 
   private List<Major> ;}

这样就行了,不用new
[解决办法]
用hibernate的话可以配级联操作的,保存一方,另外的信息也就保存了

热点排行