hibernate建表多对多建表

Student.java


 1 package cn.itcast.hiberate.sh.domain;
2
3 import java.util.Set;
4
5 public class Student {
6 private Long sid;
7 private String sname;
8 private String description;
9 Set<Course> courses;
10
11
12 public Set<Course> getCourses() {
13 return courses;
14 }
15 public void setCourses(Set<Course> courses) {
16 this.courses = courses;
17 }
18 public Long getSid() {
19 return sid;
20 }
21 public void setSid(Long sid) {
22 this.sid = sid;
23 }
24 public Student(String sname, String description) {
25 super();
26 this.sname = sname;
27 this.description = description;
28 }
29 public Student() {
30 // TODO Auto-generated constructor stub
31 }
32 public String getSname() {
33 return sname;
34 }
35 public void setSname(String sname) {
36 this.sname = sname;
37 }
38 public String getDescription() {
39 return description;
40 }
41 public void setDescription(String description) {
42 this.description = description;
43 }
44
45 }

Student.hbm.xml


 1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4 <hibernate-mapping>
5 <class name="cn.itcast.hiberate.sh.domain.Student">
6 <id name="sid" length="5">
7 <generator class="increment"></generator>
8 </id>
9 <property name="sname" length="20"></property>
10 <property name="description" length="100"></property>
11 <!--
12 table就是用来描述第三张表
13 key 用来描述外键,多对多的关系看对哪张表建立映射
14 此表是描述Student信息的,所以 key中 column写sid
15
16 many-to-many 中用于建立关系的所以 在第三张表中关系用cid建立
17 -->
18 <set name="courses" table="student_course">
19 <key>
20 <column name="sid"></column>
21 </key>
22 <many-to-many class="cn.itcast.hiberate.sh.domain.Course" column="cid">
23 </many-to-many >
24 </set>
25 </class>
26 </hibernate-mapping>

Course.java


 1 package cn.itcast.hiberate.sh.domain;
2
3 import java.io.Serializable;
4 import java.util.Set;
5
6 public class Course implements Serializable {
7 private Long cid;
8 private String cname;
9 private String description;
10 private Set<Student> students;
11 public Long getCid() {
12 return cid;
13 }
14 public void setCid(Long cid) {
15 this.cid = cid;
16 }
17 public String getCname() {
18 return cname;
19 }
20 public void setCname(String cname) {
21 this.cname = cname;
22 }
23 public String getDescription() {
24 return description;
25 }
26 public void setDescription(String description) {
27 this.description = description;
28 }
29 public Set<Student> getStudents() {
30 return students;
31 }
32 public void setStudents(Set<Student> students) {
33 this.students = students;
34 }
35
36 }

Course.xml


 1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4 <hibernate-mapping>
5 <class name="cn.itcast.hiberate.sh.domain.Course">
6 <id name="cid" length="5" type="java.lang.Long">
7 <generator class="increment"></generator>
8 </id>
9 <property name="cname" length="20" type="java.lang.String"></property>
10
11 <property name="description" length="100" type="java.lang.String"></property>
12 <!--
13 set元素对应类中的set集合
14 通过set元素使classes表与student表建立关联
15 key是通过外键的形式让两张表建立关联,针对的是哪张表看哪个
16 one-to-many是通过类的形式让两个类建立关联
17
18 cascade 级联
19 save-update
20 1、当 保存班级的时候,对学生进行怎么样的操作
21 如果学生对象在数据库中没有对应的值,这个时候会执行save操作
22 如果学生对象在数据库中有对应的值,这个时候会执行update操作
23 delete
24 all
25 inverse 维护关系
26 true 不维护关系
27 false 维护关系
28 default false
29 -->
30 <set name="students" table="student_course">
31 <!--
32 key是用来描述外键 哪张表就哪個外鍵
33 <many-to-many> 中的cid 描述类与类之间的关系
34 -->
35 <key>
36 <column name="cid"></column>
37 </key>
38 <many-to-many class="cn.itcast.hiberate.sh.domain.Student" column="sid">
39 </many-to-many>
40 </set>
41 </class>
42 </hibernate-mapping>

hibernate.cfg.xml


 1 <?xml version=‘1.0‘ encoding=‘utf-8‘?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5 <hibernate-configuration>
6 <!--
7 一个session-factory只能连接一个数据库
8 -->
9 <session-factory>
10 <!--
11 数据库的用户名
12 -->
13 <property name="connection.username">root</property>
14 <!--
15 密码
16 -->
17 <property name="connection.password">friends</property>
18 <!--
19 url
20 -->
21 <property name="connection.url">
22 jdbc:mysql://localhost:3306/itcast_sh_hibernate_manyTomany
23 </property>
24 <!--
25 作用:根据持久化类和映射文件生成表
26 validate
27 create-drop
28 create
29 update
30 -->
31 <property name="hbm2ddl.auto">update</property>
32 <!--
33 显示hibernate内部生成的sql语句
34 -->
35
36 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
37 <property name="show_sql">true</property>
38 <mapping resource="cn/itcast/hiberate/sh/domain/Course.hbm.xml" />
39 <mapping resource="cn/itcast/hiberate/sh/domain/Student.hbm.xml" />
40
41 </session-factory>
42 </hibernate-configuration>

test.java


 1 package cn.itcast.hiberate.sh.test;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.Transaction;
6 import org.hibernate.cfg.Configuration;
7 import org.junit.Test;
8
9 import cn.itcast.hibernate.sh.utils.HiberanteUtils;
10
11 public class CreateTable extends HiberanteUtils{
12
13 @Test
14 public void createTable()
15 {
16 Configuration config=new Configuration();
17 config.configure();
18 // SessionFactory sessionFactory=config.buildSessionFactory();
19 // Session session=sessionFactory.openSession();
20 // Transaction transaction=session.beginTransaction();
21 //
22 //
23 // transaction.commit();
24 // session.close();
25 }
26 }

hibernate建表多对多建表

时间: 2025-01-02 06:47:58

hibernate建表多对多建表的相关文章

配置hibernate根据实体类自动建表功能

Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<property name="hbm2ddl.auto">update</property>     update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表:如果表里缺少列,则自动添加列. 还有其他的参数: create:

ORACLE数据库建表空间、建用户、分配用户表空间,分配用户权限

1.建表空间 create tablespace 表空间名 datafile  'D:\app\Administrator\oradata\orcl\ABC.DBF' size 100M autoextend on next 50M extent management 2.建用户 create  user 用户名  identified by password default tablespace 表空间名 temporary tablespace temp   (默认表空间名) 3.给用户赋予

hibernate多对多中间表设计

hibernate多对多中间表,一般都是两个外键,例如 用户表(user),主键:userid. 角色表(role),主键:roleid. 中间表字段为两个外键:userid,roleid作为联合主键. 但是如果想在中间表加一个字段作为单独的主键,即设置一个字段id作为主键.并且数据库采用的是oracle数据库,主键不能自增.那么采用hibernate向中间表插数据的时候,就会出现问题,即主键id字段插入为空,会报错误. 由于oracle不支持自动编号,为解决以上错误,我们还得为oracle数据

Hibernate多对一,多对多的表映射关系

版权声明:本文为博主原创文章,未经博主允许不得转载. 本文旨在介绍hibernate的实体与数据库表的各种关系映射 1.多对一/一对多关系映射 User-------用户表 Department -------------部门表 Contact---------------组件部分,(地址类)) 下面开始各实体代码: User.java实体类 package com.huangchao.model; import java.io.Serializable; import java.util.Da

【Bootstrap3.0建站笔记一】表单元素排版

1.文字和输入框前后排列: 代码: <div class="row"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading"> <h2>条件查找</h2> </div> <div class="panel-body

Sqlserver 自建一个过程用于查看表结构

自建一个过程用于查看表结构 CREATE PROC [sp_tableHelp] (@TableName VARCHAR(128) = '' ,@ColName VARCHAR(128)='') AS BEGIN --表结构速查 --Brin --DECLARE @TableName VARCHAR(128) --DECLARE @ColName VARCHAR(128) --SET @TableName = 'tLocatorMove' --SET @ColName = 'nStatus' S

oracle表中怎么建序列

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方.   1.Create Sequence   你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,   CREATE SEQUENCE emp_sequence        INCREMENT BY 1   -- 每次加几个        START WITH 1     -- 从1开始计数        NOMAXVALUE       -- 不设置

plsql表空间的建立即相关问题

通过pl/sql登录到Oracle数据库上,然后执行菜单:文件/新建/命令窗口 ,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间 创建表空间create tablespace db_name_datafile 'D:\oracle\product\10.2.0\oradata\orcl\db_name_.dbf' size 200Mautoextend on next 10M maxsize unlimited loggingextent management local autoa

TEMP表空间未建导致XMLTYPE类型内容读取错误

今天一用户环境说所有数据表中的xmltype类型,通过查询语句看到如下结果: 例如表名ZLMXXXX的表中配置这个字段是SYS.XMLTYPE,可以看到这个字段所有值都是<Value Error>错误信息,而不报错的是因为该字段是'空'无内容的原因,仔细询问用户该问题出现前是否做了什么操作,得到的回答是该数据库由于硬件变更,进行了迁移,由于数据库本身比较小,且迁移的环境平台完全一样,因此迁移的方式最原始简单的是'冷备份'恢复,但是迁移过来就发现所有XMLTYPE内容的字段都出现错误,而其他字段