spring mvc中处理多对多的同时存储
2015-11-06 17:36
417 查看
问题:
在多对多关系中,例如参考中的学生和教师,如果教师也没有存入数据库,学生也没有存入数据库,如何在他们同时存入数据库时,还建立他们的关系表?
Hibernate的处理:
Student s = new Student();
s.setName("小猪");
Teacher t = new Teacher();
t.setName("小李");
Set<Teacher> t_set = new HashSet<Teacher>();
t_set.add(t);
s.setTeacherList(t_set);
session.save(s);
Spring MVC的处理:
Student s = new Student();
s.setName("小猪");
Teacher t = new Teacher();
t.setName("小李");
[b]teacherDao.save(t);
[/b]
Set<Teacher> t_set = new HashSet<Teacher>();
t_set.add(t);
s.setTeacherList(t_set);
studentDao.save(s);
这样处理的情况是将老师的信息存入DAO,然后将学生信息存入DAO,学生信息存入时关联了对应的老师信息。
参考:
http://blog.csdn.net/liuxianbing119/article/details/7283769
原作者liuxianbing
这部分内容实现多对多如下,
一般情况下,多对多的关联关系是需要中间表的;
情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只需要写出两张主表的model即可)
学生表
@Entity
@Table(name = "T_STUDENT")
@SequenceGenerator(name = "SEQ_STUDENT", sequenceName = "SEQ_STUDENT")
public class Student implements Serializable {
private static final long serialVersionUID = 2524659555729848644L;
private Long id;
private String name;
private Date birthday;
private int sex;
private String address;
private Set<Teacher> teacherList;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STUDENT")
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
@Column(name = "BIRTHDAY")
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Column(name = "sex")
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@Column(name = "address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "T_TEACHER_STUDENT",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "teacher_id"))
public Set<Teacher> getTeacherList() {
return teacherList;
}
public void setTeacherList(Set<Teacher> teacherList) {
this.teacherList = teacherList;
}
}
教师表
@Entity
@Table(name = "T_TEACHER")
@SequenceGenerator(name = "SEQ_TEACHER", sequenceName = "SEQ_TEACHER")
public class Teacher implements Serializable {
private static final long serialVersionUID = 2297316923535111793L;
private Long id;
private String name;
private int sex;
private Set<Student> studentList;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TEACHER")
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "sex")
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@ManyToMany(mappedBy = "teacherList", cascade = CascadeType.ALL)
public Set<Student> getStudentList() {
return studentList;
}
public void setStudentList(Set<Student> studentList) {
this.studentList = studentList;
}
}
hibernate.cfg.xml配置2个class类
<mapping class="com.dvn.li.model.Student"/>
<mapping class="com.dvn.li.model.Teacher"/>
测试:
SessionFactory sessionFactory = null;
Session session = null;
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
session.beginTransaction();
Student s = new Student();
s.setName("小猪");
Teacher t = new Teacher();
t.setName("小李");
Set<Teacher> t_set = new HashSet<Teacher>();
t_set.add(t);
s.setTeacherList(t_set);
session.save(s);
} catch (Exception e) {
if (session != null) {
session.getTransaction().rollback();
}
}
在多对多关系中,例如参考中的学生和教师,如果教师也没有存入数据库,学生也没有存入数据库,如何在他们同时存入数据库时,还建立他们的关系表?
Hibernate的处理:
Student s = new Student();
s.setName("小猪");
Teacher t = new Teacher();
t.setName("小李");
Set<Teacher> t_set = new HashSet<Teacher>();
t_set.add(t);
s.setTeacherList(t_set);
session.save(s);
Spring MVC的处理:
Student s = new Student();
s.setName("小猪");
Teacher t = new Teacher();
t.setName("小李");
[b]teacherDao.save(t);
[/b]
Set<Teacher> t_set = new HashSet<Teacher>();
t_set.add(t);
s.setTeacherList(t_set);
studentDao.save(s);
这样处理的情况是将老师的信息存入DAO,然后将学生信息存入DAO,学生信息存入时关联了对应的老师信息。
参考:
http://blog.csdn.net/liuxianbing119/article/details/7283769
原作者liuxianbing
这部分内容实现多对多如下,
一般情况下,多对多的关联关系是需要中间表的;
情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只需要写出两张主表的model即可)
学生表
@Entity
@Table(name = "T_STUDENT")
@SequenceGenerator(name = "SEQ_STUDENT", sequenceName = "SEQ_STUDENT")
public class Student implements Serializable {
private static final long serialVersionUID = 2524659555729848644L;
private Long id;
private String name;
private Date birthday;
private int sex;
private String address;
private Set<Teacher> teacherList;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STUDENT")
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Temporal(TemporalType.DATE)
@Column(name = "BIRTHDAY")
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Column(name = "sex")
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@Column(name = "address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "T_TEACHER_STUDENT",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "teacher_id"))
public Set<Teacher> getTeacherList() {
return teacherList;
}
public void setTeacherList(Set<Teacher> teacherList) {
this.teacherList = teacherList;
}
}
教师表
@Entity
@Table(name = "T_TEACHER")
@SequenceGenerator(name = "SEQ_TEACHER", sequenceName = "SEQ_TEACHER")
public class Teacher implements Serializable {
private static final long serialVersionUID = 2297316923535111793L;
private Long id;
private String name;
private int sex;
private Set<Student> studentList;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_TEACHER")
@Column(name = "ID", nullable = false, precision = 22, scale = 0)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "sex")
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@ManyToMany(mappedBy = "teacherList", cascade = CascadeType.ALL)
public Set<Student> getStudentList() {
return studentList;
}
public void setStudentList(Set<Student> studentList) {
this.studentList = studentList;
}
}
hibernate.cfg.xml配置2个class类
<mapping class="com.dvn.li.model.Student"/>
<mapping class="com.dvn.li.model.Teacher"/>
测试:
SessionFactory sessionFactory = null;
Session session = null;
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
session.beginTransaction();
Student s = new Student();
s.setName("小猪");
Teacher t = new Teacher();
t.setName("小李");
Set<Teacher> t_set = new HashSet<Teacher>();
t_set.add(t);
s.setTeacherList(t_set);
session.save(s);
} catch (Exception e) {
if (session != null) {
session.getTransaction().rollback();
}
}
相关文章推荐
- Josephus环类问题,java实现
- 服务端工程师入门与进阶 Java 版
- JavaScirpt学习经历
- Java读取properties配置文件时,中文乱码解决方法
- spring ioc原理(看完后大家可以自己写一个spring)
- kettle crontab java: command not found
- myeclipse三个地方的java版本统一
- Spring 整合 Mina
- Java的IO流的操作和一些理解
- Javapns-sdk16-2.2.1多线程推送
- java 参数传递 空对象 null
- Spring使用session,request,global sessiong作用域出现异常解决方法
- Java:类与继承
- 实战企业项目--springMVC+Mybatis
- Java编程中的异常和错误你遇到过哪些?
- java中HashSet详解
- java核心技术 要点笔记3
- SpringMVC在Controller层实现aop,同类中方法调用问题
- 关于java.io.IOException: open failed: EACCES (Permission denied)问题的解决
- java学习 大问题 @Service @Autowired @Override spring的装配