基于主键映射的 一对一关系
来源:互联网 发布:心理学书籍推荐 知乎 编辑:程序博客网 时间:2024/05/14 08:06
一.
二.代码
1.Department类
package cn.edu.sdut.hibernate.onetoone2;public class Department {private int deId;private String deName;private Manager mgr;public int getDeId() {return deId;}public void setDeId(int deId) {this.deId = deId;}public String getDeName() {return deName;}public void setDeName(String deName) {this.deName = deName;}public Manager getMgr() {return mgr;}public void setMgr(Manager mgr) {this.mgr = mgr;}}2.Manager类
package cn.edu.sdut.hibernate.onetoone2;public class Manager {private int maId;private String mName;private Department department;public int getMaId() {return maId;}public void setMaId(int maId) {this.maId = maId;}public String getmName() {return mName;}public void setmName(String mName) {this.mName = mName;}public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}}
3Department.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-10-30 14:28:39 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="cn.edu.sdut.hibernate.onetoone2.Department" table="DEPARTMENTS"> <id name="deId" type="int"> <column name="DE_ID" /> <!-- 使用外键的方式来生成当前的主键 --> <generator class="foreign" > <!-- property 属性指定使用当前持久化类的哪一个属性的主键作为外键 --> <param name="property">mgr</param> </generator> </id> <property name="deName" type="java.lang.String"> <column name="DE_NAME" /> </property> <!-- 采用 foreign 主键生成器策略的一端增加 one-to-one 元素映射关联属性,其 one-to-one 节点还应增加 constrained=true 属性, 以使当前的主键上添加外键约束--> <one-to-one name="mgr" class="cn.edu.sdut.hibernate.onetoone2.Manager" constrained="true"></one-to-one> </class></hibernate-mapping>
4.Manager.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-10-30 14:28:39 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="cn.edu.sdut.hibernate.onetoone2.Manager" table="MANAGERS"> <id name="maId" type="int"> <column name="MA_ID" /> <generator class="native" /> </id> <property name="mName" type="java.lang.String"> <column name="M_NAME" /> </property> <one-to-one name="department" class="cn.edu.sdut.hibernate.onetoone2.Department" ></one-to-one> </class></hibernate-mapping>
5.DoubleOneToOneTest类
package cn.edu.sdut.hibernate.onetoone2;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.After;import org.junit.Before;import org.junit.Test;public class DoubleOneToOneTest {private SessionFactory sessionFactory;private Session session;private Transaction transaction;@Beforepublic void init(){Configuration configuration = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();sessionFactory = configuration.buildSessionFactory(serviceRegistry);session = sessionFactory.openSession();transaction = session.beginTransaction();}@Afterpublic void destory(){transaction.commit();session.close();sessionFactory.close();}@Testpublic void testSave(){Manager manager = new Manager();manager.setmName("csc");Department department = new Department();department.setDeName("AA");department.setMgr(manager);manager.setDepartment(department);//保存的时候先保存1to1的,后保存nto1(设置为unique = true),效率高session.save(manager);session.save(department);}@Testpublic void testGet(){//get获取的时候不会出现懒加载异常,因为在得到manger的时候会把所有的信息加载出来Manager manager = (Manager) session.get(Manager.class, 3);System.out.println(manager.getDepartment().getClass().getName());Department department = (Department) session.get(Department.class, 2);System.out.println(department.getMgr().getClass().getName());}@Testpublic void testDelete(){//再不设置联级关系的时候不能联级删除Manager manager = (Manager) session.get(Manager.class, 2);//Department department = (Department) session.get(Department.class, 1);//session.delete(department);session.delete(manager);}}
6.hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- 配置连接数据库的基本信息 --> <property name="connection.username">root</property> <property name="connection.password">csc</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///hibernate5</property> <!-- 配置hibernate的基本信息 --> <!-- hibernate 所使用的数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!-- 执行sql时是否在控制台上打印 --> <property name="show_sql">true</property> <!-- 是否对sql进行格式化 --> <property name="format_sql">true</property> <!-- 指定自动生成数据表的策略 --> <property name="hbm2ddl.auto">update</property> <!-- 指定session的delete方法会把对象的id置为null --> <property name="hibernate.use_identifier_rollback">true</property> <!-- 指定数据库的隔离级别 --> <property name="connection.isolation">2</property> <!-- 配置c3p0数据池 --> <property name="hibernate.c3p0.max_size">100</property> <property name="hibernate.c3p0.min_size">20</property> <property name="hibernate.c3p0.acquire_increment">5</property> <property name="hibernate.c3p0.timeout">2000</property> <property name="hibernate.c3p0.idle_test_period">2000</property> <property name="hibernate.c3p0.max_statements">10</property> <!-- 设定JDBC的statment读取数据的时候每次在数据库中读取的记录的条数 --> <property name="hibernate.jdbc.fetch_size">100</property> <!-- 设定对数据进行批量操作,批次更新和批次插入的批次大小 --> <property name="hibernate.jdbc.batch_size">30</property> <!-- 指定关联的xxx.hbm.xml文件 --> <mapping resource="cn/edu/sdut/hibernate/helloworld/News.hbm.xml"/> <mapping resource="cn/edu/sdut/hibernate/manytoone/Customer.hbm.xml"/> <mapping resource="cn/edu/sdut/hibernate/manytoone/Order.hbm.xml"/> <!-- <mapping resource="cn/edu/sdut/hibernate/onetoone/Department.hbm.xml"/> <mapping resource="cn/edu/sdut/hibernate/onetoone/Manager.hbm.xml"/> --> <mapping resource="cn/edu/sdut/hibernate/onetoone2/Department.hbm.xml"/> <mapping resource="cn/edu/sdut/hibernate/onetoone2/Manager.hbm.xml"/> </session-factory></hibernate-configuration>
0 0
- Hibernate基于主键的一对一映射关系
- 基于主键映射的 一对一关系
- Hibernate之基于主键映射的一对一关联关系
- hibernate实现一对一关系映射(基于主键)
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- Hibernate ORM映射:基于主键的一对一
- 基于主键的一对一关联关系
- 基于主键的一对一关联关系
- Hibernate关系映射 --- 一对一实例分析(双向关联,是基于主键的)
- Hibernate基于外键和主键的双向一对一关系映射
- 基于外键映射的 一对一关系
- 一对一关联关系(基于外键映射和基于主键映射两种方式)
- hibernate基于主键的一对一映射(单双向)
- 第07章 ORM映射:基于主键的一对一
- Hibernate一对一映射(基于外键的映射,基于主键的映射)
- Hibernate基于主键的一对一关系----单向双向
- Hibernate-映射关系- 基于主键映射的1<->1映射
- hibernate的一对一主键双向映射关系和外键双向映射关系(一)
- 编写app的一些心得
- 开源连接池C3P0解析
- saturate_cast<uchar>( (g_nContrastValue*0.01)*( g_srcImage.at<Vec3b>(y,x)[c] ) + g_nBrightValue );
- CodeForces 550B Preparing Olympiad 暴搜
- poj-3723-生成树
- 基于主键映射的 一对一关系
- 不懂编程金融狗的葵花宝典03(python/K近邻法下篇/机器学习入门简单详细代码)
- ios sqlite 数据库文件的位置
- IO流之DataInputStream 、DataOutputStream
- 14.Java本地线程(ThreadLocal)
- OpenCV中Mat、cvMat和IplImage类型转换
- Centos7安装配置NFS服务和挂载
- Myecplise 使用Ueditor,项目莫名出现一个红叉解决方案
- 数据库概论