Hibernate学习笔记(七)Hibernate 映射关系

来源:互联网 发布:命运2 枪匠遥测数据 编辑:程序博客网 时间:2024/06/06 04:03

一:Hibernate 一对一映射关系实现

1,按照主键映射;

User类

public class User {private int id;private String name;private Address address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}}

Address类

public class Address {private int id;private String address;private String zipcode;private User user;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getZipcode() {return zipcode;}public void setZipcode(String zipcode) {this.zipcode = zipcode;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

User.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"><class name="User" table="t_user"><id name="id" column="userId"><generator class="native"></generator></id><property name="name" column="userName"></property><one-to-one name="address" class="com.java1234.model.Address" cascade="all"></one-to-one></class></hibernate-mapping>
Address.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"><class name="Address" table="t_address"><id name="id" column="addressId"><generator class="foreign"><param name="property">user</param></generator></id><property name="address" column="address"></property><property name="zipcode" column="zipcode"></property><one-to-one name="user" class="com.java1234.model.User" constrained="true"></one-to-one></class></hibernate-mapping>

TUnit

@Testpublic void testSave1(){User user=new User();user.setName("张三");Address address=new Address();address.setAddress("某地方");address.setZipcode("43242");address.setUser(user);user.setAddress(address);session.save(user);}


2,按照外键映射;

User2.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"><class name="User2" table="t_user2"><id name="id" column="userId"><generator class="native"></generator></id><property name="name" column="userName"></property><many-to-one name="address" class="com.java1234.model.Address2" column="addressId" cascade="all" unique="true"></many-to-one></class></hibernate-mapping>

Address2.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.java1234.model"><class name="Address2" table="t_address2"><id name="id" column="addressId"><generator class="native"></generator></id><property name="address" column="address"></property><property name="zipcode" column="zipcode"></property><one-to-one name="user" class="com.java1234.model.User2" property-ref="address"></one-to-one></class></hibernate-mapping>

JUnit

@Testpublic void testSave2(){User2 user=new User2();user.setName("李四");Address2 address=new Address2();address.setAddress("某地方2");address.setZipcode("432422");address.setUser(user);user.setAddress(address);session.save(user);}


二:Hibernate 多对多映射关系实现

由于学生与课程是多对多所以可用该例进行学习。

1.单向

Student类

public class Student {private int id;private String name;private Set<Course>courses=new HashSet<Course>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Course> getCourses() {return courses;}public void setCourses(Set<Course> courses) {this.courses = courses;}}

Course类

public class Course {private int id;private String courseName; //课程名public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCourseName() {return courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}}
Student.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.zhu.model"><class name="Student" table="t_student"> <id name="id" column="studentId"> <generator class="native"></generator> </id> <property name="name"></property> <set name="courses" table="student_course" cascade="save-update"> <key column="student_id"></key><many-to-many class="com.zhu.model.Course" column="course_id"></many-to-many> </set></class></hibernate-mapping>
Course.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.zhu.model"><class name="Course" table="t_course"> <id name="id" column="courseId"> <generator class="native"></generator> </id> <property name="courseName"></property> </class></hibernate-mapping>
JUnit
@Testpublic void TestSave(){Student s1=new Student();s1.setName("张三");Student s2=new Student();s2.setName("李四");Course c1=new Course();c1.setCourseName("数学");Course c2=new Course();c2.setCourseName("语文");s1.getCourses().add(c1);s1.getCourses().add(c2);s2.getCourses().add(c1);s2.getCourses().add(c2);session.save(s1);session.save(s2);}@Testpublic void TestLoad(){Student s=(Student)session.get(Student.class, 1);for(Course c:s.getCourses()){System.out.println(c.getCourseName());}}
2双向
Student2类

public class Student2 {private int id;private String name;private Set<Course2>courses=new HashSet<Course2>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<Course2> getCourses() {return courses;}public void setCourses(Set<Course2> courses) {this.courses = courses;}}
Course类

public class Course2 {private int id;private String courseName; //课程名private Set<Student2>students=new HashSet<Student2>();public Set<Student2> getStudents() {return students;}public void setStudents(Set<Student2> students) {this.students = students;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCourseName() {return courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}}
Student2.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.zhu.model"><class name="Student2" table="t_student2"> <id name="id" column="studentId"> <generator class="native"></generator> </id> <property name="name" column="stuName"></property> <set name="courses" table="student_course2" cascade="save-update"> <key column="student_id"></key><many-to-many class="com.zhu.model.Course2" column="course_id"></many-to-many> </set></class></hibernate-mapping>
Course2.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.zhu.model"><class name="Course2" table="t_course2"> <id name="id" column="courseId"> <generator class="native"></generator> </id> <property name="courseName"></property> <set name="students" inverse="true" table="student_course2"> <key column="course_id"></key> <many-to-many class="com.zhu.model.Student2" column="student_id" ></many-to-many> </set></class></hibernate-mapping>

JUnit
@Testpublic void TestSave2(){Student2 s1=new Student2();s1.setName("张三");Student2 s2=new Student2();s2.setName("李四");Course2 c1=new Course2();c1.setCourseName("数学");Course2 c2=new Course2();c2.setCourseName("语文");s1.getCourses().add(c1);s1.getCourses().add(c2);s2.getCourses().add(c1);s2.getCourses().add(c2);session.save(s1);session.save(s2);}@Testpublic void TestLoad2(){//通过课程获取学习该课程的学生Course2 c=(Course2)session.get(Course2.class, 1);for(Student2 s:c.getStudents()){System.out.println(s.getName());}}


阅读全文
1 0
原创粉丝点击