hibernate MTM 联合主键
//适用于表里没有其他列,只有主键
//Course.java实体类
package com.tao.pojo; import java.util.HashSet;
import java.util.Set; public class Course {
private int id;
private String name;
private Set<Student> stu=new HashSet<Student>(); public Course() {
super();
}
public Course(int id, String name) {
super();
this.id = id;
this.name = name;
}
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<Student> getStu() {
return stu;
}
public void setStu(Set<Student> stu) {
this.stu = stu;
}
@Override
public String toString() {
return "Course [id=" + id + ", name=" + name + "]";
} } //Student.java实体类 package com.tao.pojo; import java.util.HashSet;
import java.util.Set; public class Student {
private int id;
private String name;
private String gender;
private Set<Course> cou=new HashSet<Course>(); public Student() {
super();
}
public Student(int id, String name, String gender) {
super();
this.id = id;
this.name = name;
this.gender = gender;
}
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Set<Course> getCou() {
return cou;
}
public void setCou(Set<Course> cou) {
this.cou = cou;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", gender=" + gender + "]";
} } //配置文件
//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> <class name="com.tao.pojo.Course" table="course">
<id name="id">
<!-- 自动增长 -->
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- name:实体来中的属性名 (Clazz的名称) clazz:属性类型(clazz的类型是Clazz)-->
<!-- column:外键列名称 -->
<!--stu是实体类中set集合的名,sc是表名 , cid是Course在sc表中的外键, -->
<set name="stu" table="sc">
<key column="cid"></key>
<!--set集合当中所存放的对象类型 Student类 sid是Student在sc表中的外键 -->
<many-to-many class="com.tao.pojo.Student" column="sid"></many-to-many>
</set>
</class> </hibernate-mapping> //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> <class name="com.tao.pojo.Student" table="student">
<id name="id">
<!-- 自动增长 -->
<generator class="native"></generator>
</id>
<!--普通列 -->
<property name="name"/>
<property name="gender"/>
<!-- set集合的配置 sid是Student在sc表中的列名-->
<set name="cou" table="sc">
<!-- Student 自己的键 -->
<key column="sid"></key>
<!--set的数据库类型 cid是Course在sc表中的外键 -->
<!--Course的键 -->
<many-to-many class="com.tao.pojo.Course" column="cid"></many-to-many>
</set>
</class> </hibernate-mapping> //映射文件hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 自动生成表,数据库得手动创建 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test0105_MTM</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 自动创建或更新表(没有就创建,有就更新 )-->
<property name="hbm2ddl.auto">update</property>
<!--数据库方言( 如果外键没有生成就把数据库方言设置一下 ) -->
<!-- org.hibernate.dialect.MySQL5InnoDBDialect 是 mysql数据库方言的类名 在java文件里巧 MySQL5 选MySQL5InnoDBDialect -->
<!-- 如果执行完了没报错,外键还是没有,就把表删了,再执行一次 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!--配置映射文件 -->
<mapping resource="com/tao/pojo/course.hbm.xml"/>
<mapping resource="com/tao/pojo/student.hbm.xml"/>
</session-factory> </hibernate-configuration> //测试类
//TestJUnit.java
package com.tao.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.tao.pojo.Course;
import com.tao.pojo.Student; public class TestJUnit {
SessionFactory factory ;
Session session ;
@Before
public void test001() {
Configuration configure = new Configuration().configure();
factory= configure.buildSessionFactory();
session= factory.openSession();
session.beginTransaction();
}
@After
public void test002() {
session.getTransaction().commit();
session.close();
factory.close();
}
@Test
public void TestStudent() { } }
测试的时候测试类里不用写内容,这里用TestStudent()测试
hibernate MTM 联合主键的更多相关文章
- hibernate里联合主键composite-id映射,查询单个主键的问题
今天项目中遇到这个问题,搞了大半天,现在记录下来hibernate里联合主键配置(多个字段一起作为主键) <class name="com.cskj.hibernate.map.BbW ...
- hibernate 注解 联合主键映射
联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...
- Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)
Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- Hibernate联合主键映射
1.联合主键的映射规则 1) 类中的每个主键属性都对应到数据表中的每个主键列. Hibernate要求具有联合主键的实体类实现Serializable接口,并且重写hashCode与equals方法, ...
- hibernate 联合主键生成机制(组合主键XML配置方式)
hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体 ...
- HIBERNATE一对一双向外键联合主键关联
HIBERNATE一对一双向外键联合主键关联: 一. 创建主键类:这个主键必须实现serializedable接口和重写其中的hashCode方法和equals方法:为主键类添加一个叫做@Embedd ...
- 【Hibernate】--一对一关联、联合主键
一.数据模型 1.学生信息模型(编号.名称.身份信息) public class Student implements java.io.Serializable{ private static fin ...
随机推荐
- ES6中Promise详解
Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise 提供统一的 AP ...
- 遍历输出图片加hover
1. $(".icon a>div").hover(function () { var slls = $(this).attr("class"); sll ...
- Implement int sqrt(int x).
自己设计函数,实现求根号.x是非负整数. Input: 8 Output: 2 当开出根号后有小数,则省略小数部分.. 思路:只要找到一个数a,a*a<=x而且(a+1)*(a+1)>x, ...
- BAT面试技巧
很多人都质疑面试前去google一下面试题,是否有用....其实真实情况往往是这样:前台告诉经理,有个面试者来了,经理一拍头:啊!差点忘了!拿起电话:小谢,你有空吧,帮忙面个试! 小谢答应后,goog ...
- FreeMarker系列学习笔记
FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面 ...
- access窗体最大化到软件大小
Private Sub Form_Load()DoCmd.ShowToolbar "Ribbon", acToolbarNo '窗体最大化,占满软件最 End Sub
- 手把手教你用Jenkins自动发布dotnet core程序
Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安装教程略.... 嗯?不是说好手把手么 ...
- CentOs 6 或 7 yum安装JDK1.8 (内含报 PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.163.com'"错误解决方案)并分析为什么不能yum安装
查看JDK的安装路径 # java -version============================查看Linux系统版本信息# cat /etc/redhat-releaseCentOS r ...
- Python实现PPPOE攻击工具
前言 大家可能对PPPOE不是很熟悉,但是肯定对拨号上网非常熟悉,拨号上网就是用的这种通信协议.一般PPPOE认证上网主要用于校园网或者小区网中,拨号界面如下图所示. 但是PPPOE这种通信协议,是有 ...
- 解决Select标签的Option在IE浏览中display:none不生效的问题
页面的Select标签,需要控制Select的Option不需要显示,根据条件来隐藏某些Option选项. 正常情况下使用hide()就能实现,hide()方法实际是给Option加上display属 ...