教师和学生是多对多关联,为此我做了三张表:教师表,学生表和中间表。在对这三张表做测试的时候,我写了这么段代码:
//教师为关系的维护端
TeacherFacadeRemote sdao = (TeacherFacadeRemote)ctx.lookup("TeacherFacade/remote");
Teacher teacher1 = new Teacher();
teacher1.setTcourse("徐德志");
teacher1.setTname("数据结构");
Teacher teacher2 = new Teacher();
teacher2.setTcourse("罗三定");
teacher2.setTname("数字图像");
Student student1 = new Student();
student1.setSclass("软件0302");
student1.setSname("王博");
Student student2 = new Student();
student2.setSclass("软件0301");
student2.setSname("阿标");
Student student3 = new Student();
student3.setSclass("软件0302");
student3.setSname("全中");
Student student4 = new Student();
student4.setSclass("软件0301");
student4.setSname("曹梅");
teacher1.getStudents().add(student1); //teacher1带的学生是student1
teacher1.getStudents().add(student3);
teacher2.getStudents().add(student1); //teacher2带的学生也是student1
teacher2.getStudents().add(student4);
teacher2.getStudents().add(student2);
sdao.save(teacher1);
sdao.save(teacher2);这样学生表会出现两条student1的纪录,但我只想让学生表存在唯一的学生纪录而中间表里可以存在一个教师对应多个学生这样的纪录,请问有什么办法?
附:
Teacher.java
@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinTable(name = "teacher_student", catalog = "ejb", joinColumns = { @JoinColumn(name = "teacherid", unique = false, nullable = true, insertable = true, updatable = true) }, inverseJoinColumns = { @JoinColumn(name = "studentid", unique = false, nullable = true, insertable = true, updatable = true) })
public Set<Student> getStudents() {
return this.students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}Student.java
@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "students")
public Set<Teacher> getTeachers() {
return this.teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
//教师为关系的维护端
TeacherFacadeRemote sdao = (TeacherFacadeRemote)ctx.lookup("TeacherFacade/remote");
Teacher teacher1 = new Teacher();
teacher1.setTcourse("徐德志");
teacher1.setTname("数据结构");
Teacher teacher2 = new Teacher();
teacher2.setTcourse("罗三定");
teacher2.setTname("数字图像");
Student student1 = new Student();
student1.setSclass("软件0302");
student1.setSname("王博");
Student student2 = new Student();
student2.setSclass("软件0301");
student2.setSname("阿标");
Student student3 = new Student();
student3.setSclass("软件0302");
student3.setSname("全中");
Student student4 = new Student();
student4.setSclass("软件0301");
student4.setSname("曹梅");
teacher1.getStudents().add(student1); //teacher1带的学生是student1
teacher1.getStudents().add(student3);
teacher2.getStudents().add(student1); //teacher2带的学生也是student1
teacher2.getStudents().add(student4);
teacher2.getStudents().add(student2);
sdao.save(teacher1);
sdao.save(teacher2);这样学生表会出现两条student1的纪录,但我只想让学生表存在唯一的学生纪录而中间表里可以存在一个教师对应多个学生这样的纪录,请问有什么办法?
附:
Teacher.java
@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinTable(name = "teacher_student", catalog = "ejb", joinColumns = { @JoinColumn(name = "teacherid", unique = false, nullable = true, insertable = true, updatable = true) }, inverseJoinColumns = { @JoinColumn(name = "studentid", unique = false, nullable = true, insertable = true, updatable = true) })
public Set<Student> getStudents() {
return this.students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}Student.java
@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "students")
public Set<Teacher> getTeachers() {
return this.teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
解决方案 »
- C语言计算的校验和与java计算出的校验和不一样。。。
- tomcat 测试不成功
- STRUTS2 上传文件类型 限制问题!!!!!!!!!!
- javaj2ee知识集合
- 使用quartz定制计划任务的问题
- 请教J2EE制作的网站线程数大量增加的问题
- html:hidden 提交的值一直为null ,为什么?
- hibernate只能查询不能写数据库
- 开源工作流管理系统PowerStone发布第一个版本(Spring+Hibernate架构)
- J2ee初学者的问题,请各位师兄帮忙!
- 在javascript里如何循环判断2个数组里的值是否相等
- hibernate 双向一对多中 主表设置cascade="all-delete-orphan",在save时出现的问题
Student.java:
@ManyToMany(mappedBy = "students")
public Set<Teacher> getTeachers() {
return teachers;
}Teacher.java:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinTable(name = "Teacher_Student", joinColumns = {@JoinColumn(name = "Teacher_ID", referencedColumnName = "teacherid")},
inverseJoinColumns = {@JoinColumn(name = "Student_ID", referencedColumnName ="studentid")})
public Set<Student> getStudents() {
return students;
}测试的时候你可以单独save teacher1或者teacher2来进一步确定