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 ...
随机推荐
- ubuntu下ruby文件执行蛋疼的一个问题
ubuntu下面用sublime打开非常简单的一段代码(其实不算代码,因为没有实际语句): #!/usr/bin/ruby 在shell下加入x权限:chmod u+x doit.rb,然后运行 ./ ...
- azkaban报错记录
问题信息:Failed to build job executor for job o2o_get_file_ftp1Job type 'command ' is unrecognized. Coul ...
- Hyper Text Transfer Protocol(超文本传输协议)
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- linux 下查看wwn号
PC server主机与FC存储进行连接时,一般需要加装HBA卡,两者之间衔接的一个重要参数就是wwn号.redhat或suse下查看wwn号的方法如下.一.SuSE Linux 9查看 /proc/ ...
- 得到Android keystore签名的命令方法
keytool -list -v -keystore keyfile.jks 上面这个命令是用来得到一些签名字符串,这些字符串用来在各种平台上填资料的 再来个手动签名的命令: jarsigner -v ...
- ZeroMQ 教程 002 : 高级技巧
本文主要译自 zguide - chapter two. 但并不是照本翻译. 上一章我们简单的介绍了一个ZMQ, 并给出了三个套路的例子: 请求-回应, 订阅-发布, 流水线(分治). 这一章, 我们 ...
- 单片机开发——02工欲善其事必先利其器(Proteus软件安装破解)
在单片机开发工程中,博主经常通过模拟软件Proteus进行模拟仿真,将编译生成的"HEX"文件下载在单片机芯片中,然后进行后期的debug工作,当模拟仿真完成之后,进行硬件测试部分 ...
- 如何更好的编写async函数
2018年已经到了5月份,node的4.x版本也已经停止了维护 我司的某个服务也已经切到了8.x,目前正在做koa2.x的迁移 将之前的generator全部替换为async 但是,在替换的过程中,发 ...
- IntelliJ IDEA maven 构建简单springmvc项目
环境: apache-tomcat-8.5.15 jdk1.8.0_172 IDEA 建立一个maven-webapp项目:Create New Project 后点击next 然后next 可以选择 ...
- Angular使用总结 ---以密码确认为例实现模版驱动表单的自定义校验
上一篇 总结了模版驱动表单的基本用法,示例中的校验使用的是原生HTML5的校验方式,本文补上自定义校验的部分. HTML5原生的表单校验属性(必填,长度限制,取值间隔,正则表达式等等)可以满足普通的校 ...