第一次使用多对多的双向关联,有点疑惑。
现在有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个问题
现在有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个问题
多对多的关系可以描述为两个一对多关系,2张表和连接表之间的关系就是一对多了
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不能将值 NULL 插入列 'cid',表 'test.dbo.student';列不允许有空值。INSERT 失败。这多对多关联不能对2张空表进行操作的吗?