hibernate映射(一) 之Hibernate单项多对一映射
来源:互联网 发布:淘宝客服晚班可在家上 编辑:程序博客网 时间:2024/06/14 19:24
数据库sql
DROP TABLE IF EXISTS `person`;CREATE TABLE `person` ( `person_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `address_id` int(11) DEFAULT NULL, PRIMARY KEY (`person_id`)) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `address`;CREATE TABLE `address` ( `address_id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(50) DEFAULT NULL, PRIMARY KEY (`address_id`)) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;
Person实体类
package org.lei.model;import java.io.Serializable;public class Person implements Serializable{private Integer personId;private String name;private Address address;public Integer getPersonId() {return personId;}public void setPersonId(Integer personId) {this.personId = personId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public Person(){}}
Address实体类
package org.lei.model;import java.io.Serializable;public class Address implements Serializable{private Integer addressId;private String address;public Address(){}public Integer getAddressId() {return addressId;}public void setAddressId(Integer addressId) {this.addressId = addressId;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}
person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name = "org.lei.model.Person" table="person"> <id name = "personId" type="java.lang.Integer"> <column name="person_id"/> <generator class="native"></generator> </id> <property name ="name" type="java.lang.String"> <column name="name" length="10"/> </property> <many-to-one name="address" column="address_id" class="org.lei.model.Address" outer-join="true" cascade="save-update"> </many-to-one> <!-- Hibernate outer-join参数允许下列三个不同值: auto:(默认) 使用外连接抓取关联(对象),如果被关联的对象没有代理(proxy) true:一直使用外连接来抓取关联 false:永远不使用外连接来抓取关联 --> </class> </hibernate-mapping>
address.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name ="org.lei.model.Address" table="address" > <id name="addressId" type="java.lang.Integer"> <column name="address_id"/> <generator class="native" > </generator> </id> <property name ="address" type="java.lang.String"> <column name ="address" length="50"/> </property> </class> </hibernate-mapping>
Test类
package com.test;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.lei.model.Address;import org.lei.model.Person;public class TestPersonAddress {public static void main(String []args){//configuration 管理hibernate配置Configuration configuration = new Configuration().configure();//根据Configuration建立SessionFatorySessionFactory sessionFactory = configuration.buildSessionFactory();Address address1 = new Address();address1.setAddress("address1");Address address2 = new Address();address2.setAddress("address2");Person person1 = new Person();Person person2 = new Person();Person person3 = new Person();person1.setName("person1");person1.setAddress(address1);person2.setName("person2");person2.setAddress(address2);person3.setName("person3");person3.setAddress(address1);Integer pid = null ;//定义主键变量Session session = sessionFactory.openSession();//添加数据Transaction tx = null;//开始事务try{tx = session.beginTransaction();//创建主键变量pid = (Integer)session.save(person1);session.save(person2);session.save(person3);tx.commit();}catch (RuntimeException e){if(tx!=null){tx.rollback();throw e;}}finally{session.close();}/** * 修改person1,并修改对应的地址为address */session = sessionFactory.openSession();tx = null;try {tx = session.beginTransaction();person1 = (Person)session.get(Person.class, pid);person1.setName("person1 update");person1.getAddress().setAddress("address1 update");session.update(person1);tx.commit();} catch (RuntimeException e){if(tx!=null){tx.rollback();throw e;}}finally{session.close();}/** * 查询数据 */session = sessionFactory.openSession();tx = session.beginTransaction();person1 = (Person)session.get(Person.class, pid);System.out.println("person name :" +person1.getName());System.out.println("person address :"+person1.getAddress().getAddress());session.close();/** * 删除数据 */session = sessionFactory.openSession();tx = null;//开始事务try {tx = session.beginTransaction();person1 = (Person) session.get(Person.class, pid);session.delete(person1);tx.commit();} catch (RuntimeException e){if(tx!=null){tx.rollback();throw e;}}finally{session.close();}/** * 反向添加数据 */Address address3 = new Address();address3.setAddress("address3");session = sessionFactory.openSession();tx = null;try {tx = session.beginTransaction();session.save(address3);tx.commit();}catch (RuntimeException e){if(tx!=null){tx.rollback();throw e;}}finally{session.close();}sessionFactory.close();//关闭sessionfactory}}
关键总结
1、注意理解person.hbm.xml映射文件
2、由于是多对一关系,控制方Person需要增加Address属性,用来表示对应一个Address。
3、多对一使用many-to-one元素
4、cascade属性表示当空置方(Person)在进行添加、修改‘、删除时,是否关联被控制方(Address)。这里是save-update,即在添加、修改时关联
5、outer-join设置为true,即在查询关联对象时,一个sql语句就可以查出;如果设置为false,则使用抖个sql语句查出数据
原工程下载地址http://download.csdn.net/detail/renlei0109/7323803
0 0
- hibernate映射(一) 之Hibernate单项多对一映射
- Hibernate 关联映射 之 一对多单项关联 (一)
- Hibernate关联映射---多对一实例分析(单项关联)
- hibernate映射(二) 之Hibernate单项一对多映射
- hibernate多对一映射
- Hibernate 多对一映射
- 【Hibernate】多对一映射
- hibernate多对一映射
- Hibernate关联映射--多对一映射
- hibernate-对一映射
- hibernate映射(三) 之Hibernate双向一对多(多对一)映射
- Hibernate 关联映射 之 多对多 关联(一)
- Hibernate 关联映射 之 多对多 关联(一)
- Hibernate关联关系映射(多对一关联映射)
- Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)
- 导致企业营销模式脱节的几宗问题
- 【Linux入门学习之】vi/vim编辑器必知必会
- PyQt4 精彩实例分析* 实例1 Hello Kitty!
- Smack PacketReader 启动过程分析
- 一个古怪而又有用的python语法
- hibernate映射(一) 之Hibernate单项多对一映射
- summernote网页编辑器嵌入视频
- Storyboard 简述 使用 创建 数据传送 跳转
- c++-单例模式Singleton
- 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
- 字符串循环移位
- 百度不收录新站的终极解决对策
- DIV+CSS经验总结
- OpenCV编程->cvGet2D函数