hibernate一对一外键单向关联

来源:互联网 发布:elle淘宝代购真的吗 编辑:程序博客网 时间:2024/05/17 04:40

与上篇相对应,还是client和address是一对一的外键关联关系,address表中的主键ID与client表中的外键CLIENTADDRESSID构成一对一外键关联关系.

表结构和sql语句就不说了,看下外键双向关联和外键单向关联的不同点和注意项

双向关联:
   可以根据client得到address,也可以根据address得到client,双向关联时需要在client.hbm.xml中配置 

<many-to-one unique=”true” name=”client_address” column=”CLIENTADRESSID” cascade=”all”></many-to-one>;

在address.hbm.xml中配置

<one-to-one name=”address_client” property-ref=”client_address”></one-to-one>,
property-ref的值应与<many-to-one>中的name属性的值对应,说明client对象是与address对象建立的关联关系.

单向关联:

只可以根据client得到address,单向关联时只需在client.hbm.xml中配置

<many-to-one unique=”true” name=”client_address” column=”CLIENTADDRESSID” cascade=”all”>


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.MySQLInnoDBDialect</property><property name="connection.url">jdbc:mysql://localhost:3306/onetoone</property><property name="connection.username">root</property><property name="connection.password">123456</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 显示sql语句 -->    <property name="hibernate.show_sql">true </property>      <property name="format_sql">true</property><!-- 让输出的sql语句格式化 -->        <mapping resource="com/hust/javabeans/Address.hbm.xml" /><mapping resource="com/hust/javabeans/Client.hbm.xml"  /></session-factory></hibernate-configuration>

Client.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.hust.javabeans.Client" table="client">     <id name="id" column="ID"  type="integer">        <generator class="identity"></generator>     </id>          <property name="clientname" column="CLIENTNAME" type="string"></property>     <property name="phone" column="PHONE" type="string"></property>     <property name="email" column="EMAIL" type="string"></property>          <!-- 映射Client和Address的一对一外键关联,唯一多对一,实际上时一对一关系,这里的name是Client的属性,column是外键-->     <many-to-one name="client_address" class="com.hust.javabeans.Address" column="CLIENTADDRESSID" cascade="all" unique="true"></many-to-one>      </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="com.hust.javabeans.Address" table="address">  <id column="ID" name="id" type="integer">   <generator class="identity"/>  </id>  <property name="province" column="PROVINCE"  type="string"/>  <property name="city"     column="CITY"    type="string"/>  <property name="street"   column="STREET"  type="string"/>  <property name="zipcode"  column="ZIPCODE" type="string"/>      <!-- 映射Client和Address的一对一外键关联,name是Address的属性,property-ref是Client中的属性client_address,many-to-one的name属性的值,表明建立了从address对象到company对象的关联 --> <!--  <one-to-one name="address_client" class="com.hust.javabeans.Client"  property-ref="client_address"/>  --> </class></hibernate-mapping>




0 0
原创粉丝点击