Hibernate+maven+mysql处理多对多映射

网友投稿 244 2022-09-24

Hibernate+maven+mysql处理多对多映射

一 代码

1.1项目结构

1.2pom.xml

8888 30000 ${project.build.directory}/${pom.artifactId}-${pom.version} / src/main/java **/*.xml src/main/resources **/*.xml 8 8 junit junit 4.10 test org.hibernate hibernate-core 3.6.5.Final log4j log4j 1.2.16 org.slf4j slf4j-api 1.6.1 org.slf4j slf4j-nop 1.6.4 javassist javassist 3.11.0.GA org.junit.jupiter junit-jupiter-api RELEASE junit junit 4.12 mysql mysql-connector-java 5.0.8

1.3hibernate.cfg.xml

com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/cars root root true true none org.hibernate.dialect.SQLServerDialect thread

1.4HibernateUtil

package com.test.utils;/*** @Author yqq* @Date 2021/6/22 0:36* @Version 1.0*/import org.apache.log4j.Logger;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil { /** ThreadLocal Session Map */ public static final ThreadLocal SESSIONMAP = new ThreadLocal(); private static final SessionFactory sessionFactory; private static final Logger LOGGER = Logger.getLogger(HibernateUtil.class); static { try { LOGGER.debug("HibernateUti.static - loading cofig"); sessionFactory = new Configuration().configure("hibernate.cfg.xml") .buildSessionFactory(); LOGGER.debug("HibernateUtil.static - end"); } catch (Throwable ex) { ex.printStackTrace(); LOGGER.error("HibernateUti error : ExceptionInInitializerError"); throw new ExceptionInInitializerError(ex); } } private HibernateUtil() { } public static Session getSession() throws HibernateException { Session session = SESSIONMAP.get(); if(session == null) { session = sessionFactory.openSession(); SESSIONMAP.set(session); } return session; } public static void closeSession() throws HibernateException { Session session = SESSIONMAP.get(); SESSIONMAP.set(null); if(session != null) { session.close(); } }}

1.5Student

package com.test.model;import javax.persistence.*;import java.io.Serializable;import java.util.Date;import java.util.Set;/*** @Author yqq* @Date 2021/6/24 22:37* @Version 1.0*/@Entity@Table(name = "T_STUDENT")@SequenceGenerator(name = "SEQ_STUDENT", sequenceName = "SEQ_STUDENT")public class Student implements Serializable { private static final long serialVersionUID = 2524659555729848644L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SEQ_STUDENT") @Column(name = "ID", nullable = false, precision = 22, scale = 0) private Long id; @Column(name = "NAME") private String name; @Temporal(TemporalType.DATE) @Column(name = "BIRTHDAY") private Date birthday; @Column(name = "sex") private int sex; @Column(name = "address") private String address; @OneToMany(mappedBy="student",cascade=CascadeType.ALL) private Set teacherStudentList; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Set getTeacherStudentList() { return teacherStudentList; } public void setTeacherStudentList(Set teacherStudentList) { this.teacherStudentList = teacherStudentList; }}

1.6Teacher

package com.test.model;import javax.persistence.*;import java.io.Serializable;import java.util.Date;import java.util.Set;/*** @Author yqq* @Date 2021/6/24 22:38* @Version 1.0*/@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 teacherStudentList; @Id @GeneratedValue(strategy = GenerationType.IDENTITY, 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; } @OneToMany(mappedBy = "teacher",cascade=CascadeType.ALL) public Set getTeacherStudentList() { return teacherStudentList; } public void setTeacherStudentList(Set teacherStudentList) { this.teacherStudentList = teacherStudentList; }}

1.7TeacherStudent

package com.test.model;import javax.persistence.*;import java.io.Serializable;/*** @Author yqq* @Date 2021/6/24 22:39* @Version 1.0*/@Entity@Table(name = "T_TEACHERSTUDENT")@SequenceGenerator(name = "SEQ_TEACHERSTUDENT", sequenceName = "SEQ_TEACHERSTUDENT")public class TeacherStudent implements Serializable { private Long id; private Student student; private Teacher teacher; private String note1; private String note2; @Id @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "SEQ_TEACHERSTUDENT") @Column(name = "ID", nullable = false, precision = 22, scale = 0) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name = "note11") public String getNote1() { return note1; } public void setNote1(String note1) { this.note1 = note1; } @Column(name = "note22") public String getNote2() { return note2; } public void setNote2(String note2) { this.note2 = note2; } @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name = "student_id", unique = true) public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } @ManyToOne @JoinColumn(name = "teacher_id", unique = true) public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; }}

1.8ModelTest

@Testpublic void tests(){ Session session = HibernateUtil.getSession(); session.beginTransaction(); Student s = new Student(); s.setName("小猪"); Teacher t = new Teacher(); t.setName("小李"); TeacherStudent ts=new TeacherStudent(); ts.setStudent(s); ts.setTeacher(t); ts.setNote1("以呀呀!!!"); ts.setNote2("哎哎呀"); session.save(s); session.save(t); session.save(ts); session.getTransaction().commit(); HibernateUtil.closeSession();}

二 数据脚本

2.1从表

注意:该表两个外键(student_id,teacher_id)分别指向相应表的IDDROP TABLE IF EXISTS `t_teacherstudent`;CREATE TABLE `t_teacherstudent` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `note11` varchar(255) NOT NULL, `note22` varchar(255) NOT NULL, `student_id` int(11) DEFAULT NULL, `teacher_id` int(11) DEFAULT NULL, PRIMARY KEY (`ID`), KEY `sid` (`student_id`), KEY `tid` (`teacher_id`), CONSTRAINT `sid` FOREIGN KEY (`student_id`) REFERENCES `t_student` (`ID`), CONSTRAINT `tid` FOREIGN KEY (`teacher_id`) REFERENCES `t_teacher` (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

2.2主表1

DROP TABLE IF EXISTS `t_teacher`;CREATE TABLE `t_teacher` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sex` int(11) DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

2.3主表2

DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `birthday` varchar(255) DEFAULT NULL, `sex` int(255) DEFAULT NULL, `address` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:支持黄奕,怼死郭敬明!
下一篇:MySQL 中的索引解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~