Hibernate 多对多映射
package com.entity.manytomany; import java.util.List; import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany; import com.entity.BaseEntity;
@Entity
public class Student extends BaseEntity{
private String name;
@ManyToMany
//学生是不稳定的一方 所以由学生来维护
@JoinTable(name="student_course",
joinColumns=@JoinColumn(name="s_id"),
inverseJoinColumns=@JoinColumn(name="c_id"))
//关联表的表名
//关联当前表的主键
//关联对方表的主键 ()内的name即关联表内的字段名 可以自己自由设计
private List<Course> courses;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
} }
student.java
package com.entity.manytomany; import java.util.List; import javax.persistence.Entity;
import javax.persistence.ManyToMany; import com.entity.BaseEntity;
@Entity
public class Course extends BaseEntity{
private String name;
@ManyToMany(mappedBy ="courses")
//被学生类的courses对象维护
private List<Student> students;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
} }
Course.java
package com; import java.util.ArrayList;
import java.util.List; import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.entity.manytomany.Course;
import com.entity.manytomany.Student; public class TestManyToMany {
private Session s;
private Transaction tran;
@Before
public void before(){
s=HibernateUtils.getSession();
tran=s.beginTransaction(); } public void manytomany(){
Course c1=new Course();
Course c2=new Course();
Course c3=new Course();
Student stu1=new Student();
Student stu2=new Student();
Student stu3=new Student();
stu1.setName("zhangsan");
stu2.setName("lisi");
stu3.setName("wangwu");
c1.setName("java");
c2.setName("oracle");
c3.setName("html");
//新建对象
List<Course> courses =new ArrayList<Course>();//建立了一个课程集合
List<Course> courses1 =new ArrayList<Course>();
courses1.add(c2);
courses1.add(c3);
courses.add(c1);
courses.add(c2);
courses.add(c3);
//向集合中插入要选的课程
stu1.setCourses(courses);
stu2.setCourses(courses);
stu3.setCourses(courses1);
//建立关联 将课程集合set到学生的课程属性中 即学生选择了集合中所有的课程
s.save(c1);
s.save(c2);
s.save(c3);
s.save(stu1);
s.save(stu2);
s.save(stu3);
}
@Test
public void manytomanyquery(){
Course c=(Course)s.get(Course.class, 1);
for(Student s:c.getStudents()){
System.out.println(c.getName()+"-------选这门课的学生"+s.getName());
}
Course c1=(Course)s.get(Course.class, 2);
for(Student s:c1.getStudents()){
System.out.println(c1.getName()+"-------选这门课的学生"+s.getName());
}
Course c2=(Course)s.get(Course.class, 3);
for(Student s:c2.getStudents()){
System.out.println(c1.getName()+"-------选这门课的学生"+s.getName());
}
}
@After
public void after(){
tran.commit();
s.close();
}
}
testmanytomany.java
Hibernate 多对多映射的更多相关文章
- java框架篇---hibernate(多对多)映射关系
以学生和老师为例的来讲解多对多映射. 实体类: Student package cn.itcast.g_hbm_manyToMany; import java.util.HashSet; import ...
- Hibernate学习(五)Hibernate 多对多映射
说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...
- Hibernate多对多映射(双向关联)实例详解——真
一个学生可以选多门课 一门课程有多个学生上 实现步骤: 一.学生 (1)数据库创建学生数据表students,包含id,name字段 设置id字段为主键,类型:bigint,自增 设置name字段,类 ...
- hibernate多对多映射文件详解(一)
1.仓库表属性 public class WarehouseNew implements java.io.Serializable { // Fields private static final l ...
- hibernate多对多映射文件的配置
user.hbm.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate ...
- hibernate多对多映射关系实现
Course.hbm.xml: <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC &q ...
- Hibernate 多对一映射
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBL ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate笔记--单(双)向的多对多映射关系
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
随机推荐
- [BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
[Problem Description] 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的踏上了营救皮卡丘的道路. 火箭队 ...
- 【剑指offer】面试题43:n个骰子的点数
第一种思路是,每一个骰子的点数从最小到最大,如果为1-6,那么全部的骰子从最小1開始,我们如果一种从左向右的排列,右边的最低,索引从最低開始,推断和的情况. def setTo1(dices, sta ...
- linux之grep用法
运用场景:在当前目录下查找,比如代码目录,不需要在.svn目录下,以及ctags生成的tags文件中查找: grep的--exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录: ...
- System.Web.HttpContext.Current.Session为NULL值的问题?
自定义 HTTP 处理程序,从IHttpHandler继承,在写System.Web.HttpContext.Current.Session["Value"]的时 候,没有问题,但 ...
- 「C」关键字、标识符、注释、内存分析、数据、常量、变量
一.关键字 C语言提供的有特殊含义的符号,共32个. 一般在Xcode中关键字全部显示紫褐色,关键字全部都为小写.如int.return等. 二.标识符 标识符是程序员在程序中自定义的一些符号和名称. ...
- Java map取value最大值和最小值
/** * 求Map<K,V>中Value(值)的最小值 * * @param map * @return */ public static Object getMinValue(Map& ...
- Python学习之路——类
类: 类是将抽象的实物进行的划分. 在现实世界中如果我们将: 人类包含:男人.女人.孩子.老人等动物类包含:小猫.小狗.小兔子等 在代码世界中我也可以分类,例如将相同功能的代码放到一起,这就是分类. ...
- 深入浅出—JAVA(2)
2.类与对象 当你在设计类时,要记得对象是靠类的模型塑造出来的. 1.对象是已知的事物2.对象会执行的动作 对象本身已知的事物被称为 实例变量:它们代表对象的状态.切该类型的每一个对象都会独立的拥有一 ...
- 用Response对象的write方法和<%%>及<%=%>输出同样效果的乘法表格
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Response1.aspx ...
- Codeforces AIM Tech Round (Div. 2)
这是我第一次完整地参加codeforces的比赛! 成绩 news standings中第50. 我觉这个成绩不太好.我前半小时就过了前三题,但后面的两题不难,却乱搞了1.5h都没有什么结果,然后在等 ...