hibernate中关联总结

一: 一对一的关联。 一对一关联在hibernate中实现的方式有两种:主键关联和外键关联。

主键关联 :重点是关联的两个表共享一个主键值,如学生(student)和 学生证(Card); 相对简单。下面只贴出两个xml中关联的代码

<span style="white-space:pre">	</span> <one-to-one name="login" cascade="all" class="com.lyd.oneone.po.Login" lazy="false" fetch="join" outer-join="true"></one-to-one>
<span style="white-space:pre">	</span><one-to-one name="company" class="com.lyd.oneone.po.Company" constrained="true"></one-to-one>

外键关联 : 两个表各自有不同的主键,但其中一个表有一个外键引用另外一个表的主键。如客户(Client)和地址(Address)。表结构如下:

create table client(
    id int primary key,
    cname char,
     address int
);

create table address(
     id int primary key,
     city char
      
);
下面贴出映射的配置文件。
  <!--<span style="font-family: Arial, Helvetica, sans-serif;">Client配置:</span><span style="font-family: Arial, Helvetica, sans-serif;">映射与Address的一对一关外键联。唯一的多对一(</span><span style="font-family: Arial, Helvetica, sans-serif;">unique="true"</span><span style="font-family: Arial, Helvetica, sans-serif;">),实际变成一对一关系--></span>
<span style="font-family:Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"> <many-to-one cascade="all" class="com.lyd.oneone.po.Address" column="address" lazy="false" name="address" unique="true"/>

 
<!--<span style="font-family: Arial, Helvetica, sans-serif;">Address配置:</span><span style="font-family: Arial, Helvetica, sans-serif;">映射</span><span style="font-family: Arial, Helvetica, sans-serif;">Client</span><span style="font-family: Arial, Helvetica, sans-serif;">的一对一外键关联--></span><span style="font-family: Arial, Helvetica, sans-serif;">
</span>   <pre name="code" class="html">   <one-to-one class="com.lyd.oneone.po.Client" name="client" property-ref="address"/>
 
 

二:一对多  

   下面以顾客(customer)和订单(orders)为例:

Custome类:

public class Customer implements Serializable {
    private Integer id;
    private String cname;//客户名称
    private String bank;//银行帐号
    private String phone;//电话号码
    private Set orders = new HashSet();//关联另外一个类
}
Custome配置文件:

<?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 package="com.lyd.onetomany">
  <class name="Customer" table="customer">
    <id column="ID" name="id" type="integer">
      <generator class="identity"/>
    </id>
    <property column="CNAME" name="cname" type="string"/>
    <property column="BANK" name="bank" type="string"/>
    <property column="PHONE" name="phone" type="string"/>
<span style="color:#ff0000;">  <strong>  <!--一对多双向关联映射customer到orders,单的一方配置-->
    <set cascade="all" inverse="true" lazy="false" name="orders">
      <key column="CUSTOMER_ID"/>
      <one-to-many class="com.lyd.onetomany.Orders"/></strong></span>
<strong> <span style="color:#ff0000;">   </set></span></strong>
  </class>
</hibernate-mapping>


orders类
public class Orders implements Serializable {
    private Integer id;
    private String orderno;//订单号
    private Double money;//所需资金
    private Customer customer;//关联另外一个PO
}
orders配置文件:

<?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 package="com.lyd.onetomany">
  <class name="Orders" table="orders">
    <id column="ID" name="id" type="integer">
      <generator class="identity"/>
    </id>
    <property column="ORDERNO" name="orderno" type="string"/>
    <property column="MONEY" name="money" type="double"/>
<strong><span style="color:#ff0000;">    <!--一对多双向关联映射的多的一方配置-->
    <many-to-one class="com.lyd.onetomany.Customer" column="CUSTOMER_ID" lazy="false" name="customer" /></span></strong>
  </class>
</hibernate-mapping>
准备在另外一个博客中写一个学生(Student)课程(Course)成绩(Grade)的 来总结一对多记录自己刚遇到的一个问题。同时会涉及到一个表多次关联。


三:多对多  多对多的关系分析就不说啦,下面以一个案例来记录学生(Student)课程(Course)成绩(Grade),实现学生和课程的关联,为简单去掉一些字段。

如果关联对方没有数据则得到的Set是一个size()=0的Set不是一个空的Set。可用于进行操作前验证关联是否成功。

学生类:Student(不是以学号为主键,这里我就不修改啦)
  public class Student implements Serializable {
	<span style="white-space:pre">	</span>private int stId;
	<span style="white-space:pre">	</span>private String username;
	<span style="white-space:pre">	</span>private String sno;
	<span style="white-space:pre">	</span>private String password;
	<span style="white-space:pre">	</span>private Set classes =new HashSet();
<span style="white-space:pre">	</span>}
课程类:Course

  public class Course implements Serializable {
	private Integer cs_id;
	private String cname;
	private Set students =new HashSet();}
     成绩类:Grade(在这里只是为了说明表结构)
public class Student_classes implements Serializable {
	private Integer grade;
	private Integer st_id;
	private Integer cs_id;
}

学生的配置文件:
<?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.lyd.hibernate.po.Student" table="student" catalog="stuedu">
     <id name="stId" type="java.lang.Integer">
            <column name="st_id" />
            <generator class="identity" />
        </id>
        <property name="username" type="string">
            <column name="username" length="100" not-null="true" />
        </property>
        <property name="sno" type="string">
            <column name="sno" length="50" not-null="true" />
        </property>     
        <property name="password" type="string">
            <column name="password" length="20" />
        </property>   
  <strong><span style="color:#ff0000;">  <!--映射-->
    	<set name="classes" table="grade" lazy="false" cascade="save-update">
    	    <key column="st_id"></key>
    	    <many-to-many class="com.lyd.hibernate.po.Classes" column="cs_id"></many-to-many>
    	</set></span></strong>
    	
    </class>  
</hibernate-mapping>
课程的配置文件:

<?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.lyd.hibernate.po.Classes" table="classes" catalog="stuedu">
        <id name="cs_id" >
            <column name="cs_id"></column>
        </id>
       <property name="cname" type="string">
            <column name="cName" length="60" />
        </property>
   <strong><span style="color:#ff0000;"> <!--映射 -->
   		<set name="students" table="grade" lazy="false" cascade="save-update">
   		    <key column="cs_id"></key>
   		    <many-to-many class="com.lyd.hibernate.po.Student" column="st_id"></many-to-many>
   		</set></span></strong>
    </class>
</hibernate-mapping>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值