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>


















原创粉丝点击