Hibernate学习笔记——hibernate实体映射
来源:互联网 发布:非线性叙事结构,知乎 编辑:程序博客网 时间:2024/03/29 15:00
几种对应关系:
一对一关联,一对多关联,多对多关联,继承关联
一对一:
设计模式之一:
主键关联(通过表中主键产生关系),妻子和丈夫为例。
实体设计:
public class HusbandBean {private int id;private String name;private WifeBean myWife;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 WifeBean getMyWife() {return myWife;}public void setMyWife(WifeBean myWife) {this.myWife = myWife;}}
public class WifeBean {private int id;private String name;private HusbandBean myMan;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 HusbandBean getMyMan() {return myMan;}public void setMyMan(HusbandBean myMan) {this.myMan = myMan;}}
Husband.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="com.lovo.bean.HusbandBean" table="t_husband"><id name="id" column="pk_id" type="int"><generator class="increment"></generator></id><property name="name" column="f_name" type="string"></property><one-to-one name="myWife" class="com.lovo.bean.WifeBean" cascade="all"></one-to-one></class></hibernate-mapping>
wife.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="com.lovo.bean.WifeBean" table="t_wife"><id name="id" column="pk_id" type="int"><generator class="foreign"><param name="property">myMan</param></generator></id><property name="name" column="f_name" type="string"></property><one-to-one name="myMan" class="com.lovo.bean.HusbandBean" cascade="all"></one-to-one></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://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="connection.url">jdbc:oracle:thin:localhost:1521:ORCL</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="myeclipse.connection.profile">Oracle</property> <!-- 附属信息配置 --><property name="show_sql">true</property><property name="format_sql">true</property><!-- 映射文件的告知 --><mapping resource="com/lovo/bean/HusbandBean.hbm.xml" /><mapping resource="com/lovo/bean/WifeBean.hbm.xml" /> </session-factory></hibernate-configuration>
然后反向生成表:
import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;public class CreateTable {/** * 反向生成表 * @param args */public static void main(String[] args) {// TODO Auto-generated method stubConfiguration config = new Configuration().configure();SchemaExport export = new SchemaExport(config);export.create(true, true);}}
DAO层方法:
public class TestDAO {/*********************** 一对一主键关联 *************************//** * 增加 */public void marray(HusbandBean he, WifeBean she) {Session session = DBUtil.getSession();Transaction trans = session.beginTransaction();try {session.save(he);trans.commit();} catch (Exception ex) {ex.printStackTrace();trans.rollback();} finally {session.close();}}}
service层方法:
import com.lovo.bean.HusbandBean;import com.lovo.bean.WifeBean;import com.lovo.dao.TestDAO;public class TestService {public static void main(String[] args) {TestDAO dao = new TestDAO();//一对一主键关联HusbandBean he = new HusbandBean();he.setName("李亚鹏");WifeBean she = new WifeBean();she.setName("王菲");she.setMyMan(he);he.setMyWife(she);dao.marray(he, she); } }
结果:
Hibernate: select max(pk_id) from t_husbandHibernate: insert into t_husband (f_name, pk_id) values (?, ?)Hibernate: insert into t_wife (f_name, pk_id) values (?, ?)
设计模式之二:
唯一外键关联(通过外键进行关联)以父亲和儿子为例子
父亲实体:
public class FatherBean {private int id;private String name;private SonBean mySon;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 SonBean getMySon() {return mySon;}public void setMySon(SonBean mySon) {this.mySon = mySon;}}
儿子实体:
public class SonBean {private int id;private String name;private FatherBean myDad;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 FatherBean getMyDad() {return myDad;}public void setMyDad(FatherBean myDad) {this.myDad = myDad;}}
父亲表结构:
create table t_father ( pk_id number(10,0) not null, f_name varchar2(255 char), primary key (pk_id) )
儿子表结构:
create table t_son ( pk_id number(10,0) not null, f_name varchar2(255 char), fk_fatherid number(10,0) unique, primary key (pk_id) )
FatherBean.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="com.lovo.bean.FatherBean" table="t_father"><id name="id" type="int" column="pk_id"><generator class="increment"></generator></id><property name="name" type="string" column="f_name"></property><one-to-one name="mySon" class="com.lovo.bean.SonBean"property-ref="myDad" cascade="all"></one-to-one></class></hibernate-mapping>
SonBean.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="com.lovo.bean.SonBean" table="t_son"><id name="id" type="int" column="pk_id"><generator class="increment"></generator></id><property name="name" type="string" column="f_name"></property><many-to-one name="myDad" class="com.lovo.bean.FatherBean"column="fk_fatherid" unique="true" cascade="all"></many-to-one></class></hibernate-mapping>
- Hibernate学习笔记——hibernate实体映射
- Hibernate实体映射笔记
- Hibernate学习笔记(2)——搭建项目框架编写hibernate配置文件、实体映射文件
- Hibernate 学习笔记(二)-- 实体映射
- hibernate 实体关系映射笔记
- Hibernate学习笔记——Hibernate实体关联
- Hibernate实体关系映射—Annotation
- 【Hibernate — 映射实体关联关系】
- Hibernate实体关系映射—Annotation
- Hibernate实体关系映射—Annotation
- Hibernate学习笔记—映射文件配置
- Hibernate 3.2 学习笔记 映射实体关联关系
- Hibernate学习笔记(八)【映射实体关系】
- Hibernate学习笔记(八)【映射实体关系】
- Hibernate学习笔记1— Hibernate中的集合映射
- hibernate实体映射
- Hibernate实体映射浅谈
- Hibernate实体映射浅谈
- 在IOS项目开发中遇到的问题和和总结
- 如何让secureCRT显示Linux的颜色
- 中英文数字字符等混合字符串精确测量字符大小并两种方式绘制比较
- 【Oracle】关于null的讨论
- 一个基本的、标准的c++程序
- Hibernate学习笔记——hibernate实体映射
- 招聘信息大围观
- 如何让discuz论坛首页打开不显示forum.php的方法分享
- 【java】统计一篇英文文章每个字母出现的次数
- POJ2251--Dungeon Master--广搜
- 代理服务器
- 设计模式之 单例设计模式
- Maven 创建web项目
- hdu 1042 N!