第一次使用多对多的双向关联,有点疑惑。
  现在有2个表student和course,主键分别为sid和cid,外键分别为cid和sid,对应的实体类public class Student{
     private Integer sid;
     private String sname;
     private Set<Course> courses = new HashSet<Course>();
//省略get,setpublic class Course {
private int cid;
private String cname;
private Set<Student> students = new HashSet<Student>();
//省略get,set  然后有个连接表省略不写了,配置文件也不写了,测试是通过了。测试类如下:public class TestHibernate {
public static void main(String args[]){
Configuration config = new Configuration();
config.configure();
SessionFactory sf = config.buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
tx.begin();
Student s1 = new Student();
Course c1 = new Course();
s1.setSname("s1");
c1.setCname("c1");
s1.getCourses().add(c1);
Student s2 = new Student();
Course c2 = new Course();
s2.setSname("s2");
c2.setCname("c2");
c2.getStudents().add(s2); session.save(s1);
session.save(c2); tx.commit();
session.close();
}
}
控制台输出的sql语句是
Hibernate: insert into student (sname) values (?)
Hibernate: insert into course (cname) values (?)
Hibernate: insert into course (cname) values (?)
Hibernate: insert into student (sname) values (?)
Hibernate: insert into stu_cour (sid, cid) values (?, ?)
Hibernate: insert into stu_cour (cid, sid) values (?, ?)我的问题就是,2张表中的外键是何时插入的呢?从输出的sql语句并没有看出来插入或者更新外键啊。另外还有个问题就是2张表和连接表之间的关系是不是一对多?希望高人回答下2个问题

解决方案 »

  1.   

    最后两条insert语句就是插入外键的sql语句
    多对多的关系可以描述为两个一对多关系,2张表和连接表之间的关系就是一对多了
      

  2.   

    看你**.hbm.xml配置里面是不是one-to-many
      

  3.   

      发现问题了,我原来那student和course表中外键没有设置非空约束,所以插入的时候把2个外键设置为空了,当设置非空约束的时候问题就来了,执行上面的代码报错。
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'cid',表 'test.dbo.student';列不允许有空值。INSERT 失败。这多对多关联不能对2张空表进行操作的吗?