关于EJB3.0的多对多映射问题
教师和学生是多对多关联,为此我做了三张表:教师表,学生表和中间表。在对这三张表做测试的时候,我写了这么段代码:
//教师为关系的维护端
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;
}
...全文
相关推荐
EJB.rar_EJB3_EJB3.0_ejb
EJB 3.0是EJB规范的一个重大改革,极大地简化了开发流程,引入了注解驱动的编程模型,减少了XML配置。在这个教程中,我们将深入探讨在EJB 3.0开发过程中可能遇到的问题以及相应的解决策略。
EJB 3.0多对多关系实现教程与实战
对象关系映射(Object-Relational Mapping,简称ORM)是一种技术,它允许应用程序以面向对象的方式操作关系数据库,而不必编写复杂的SQL代码。ORM框架能够自动将程序中定义的类和数据库中的表进行映射,将对象的状态映射到数据库记录中,并提供了数据持久化的操作方法。使用ORM的优势在于:提高开发效率:开发者不再需要直接写SQL语句,而是通过操作对象来完成数据持久化。代码可读性高:对象之间的关系直接映射为数据库表的关系,使得代码更符合业务逻辑。维护性更强。
ejb3.0实例教程
- **一对一映射**:通过示例展示一对一关系的映射方法。 - **多对多映射**:通过示例展示多对多关系的映射方法。- **参数查询**: - **命名参数**:使用命名参数进行查询。
EJB测试题。pdf
关于M:N关系的映射问题,这通常涉及到如何在数据库中表示多对多的关系。实体之间的关系映射是ORM技术中的重要部分,它允许开发者通过对象而非数据库表来操作数据。
EJB3.0学习资料
- **关系/对象映射**:掌握各种类型的关系映射,包括一对多、多对一、一对一和多对多映射,确保数据模型与数据库表结构的一致性。


