Hibernate 一對一外鍵雙向關聯
一對一外鍵關聯是一對多外鍵關聯的特例,只是在多的一方加了個唯一性約束。 一、模型一個人對應一個地址。
/*==============================================================*//* DBMS name: MySQL 5.0 *//* Created on: 2008-12-9 0:12:54 *//*==============================================================*/drop table if exists address;drop table if exists person;/*==============================================================*//* Table: address *//*==============================================================*/create table address( id bigint not null auto_increment comment 'ID', detail varchar(120) not null comment '詳細地址', personid bigint comment '人的ID', PRimary key (id))type = InnoDB;alter table address comment '地址';/*==============================================================*//* Table: person *//*==============================================================*/create table person( id bigint not null auto_increment comment 'ID', name varchar(24) not null comment '姓名', primary key (id))type = InnoDB;alter table person comment '人';alter table address add constraint FK_Reference_4 foreign key (personid) references person (id) on delete restrict on update restrict; 二、對象模型 public class Personimplements java.io.Serializable { private Long id; private String name; private Address address; public class Addressimplements java.io.Serializable { private Long id; private Person person; private String detail; 三、映射文件<?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="entity.Person" table="person"> <id name="id" type="java.lang.Long"> <columnname="id" /> <generatorclass="identity"/> </id> <propertyname="name"type="java.lang.String"> <columnname="name"length="24"not-null="true"> <comment>姓名</comment> </column> </property> <one-to-onename="address"cascade="all"/> </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="entity.Address" table="address" catalog="testdb"> <id name="id" type="java.lang.Long"> <columnname="id" /> <generatorclass="identity"/> </id> <propertyname="detail"type="java.lang.String"> <columnname="detail"length="120"not-null="true"> <comment>詳細地址</comment> </column> </property> <many-to-onename="person"class="entity.Person" fetch="select"unique="true"> <columnname="personid"> <comment>人的ID</comment> </column> </many-to-one> </class></hibernate-mapping> <?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> <propertyname="connection.username">root</property> <propertyname="connection.url"> jdbc:mysql://localhost:3306/testdb </property> <propertyname="dialect"> org.hibernate.dialect.MySQLDialect </property> <propertyname="connection.passWord">xiaohui</property> <propertyname="connection.driver_class"> com.mysql.jdbc.Driver </property> <propertyname="show_sql">true</property> <propertyname="format_sql">true</property> <mappingresource="entity/Person.hbm.xml"/> <mappingresource="entity/Address.hbm.xml"/> </session-factory></hibernate-configuration> 四、測試import org.hibernate.Transaction; import entity.Address; import entity.Person; import utils.HibernateSessionFactory; public class Test { public staticvoid main(String[] args) { savePerson(); } public staticvoid savePerson() { Person person = new Person("張三"); Address address = new Address("XX街X號"); person.setAddress(address); address.setPerson(person); Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); session.save(person); tx.commit(); } } 運行日志:Hibernate: insert into person (name) values (?) Hibernate: insert into testdb.address (detail, personid) values (?, ?)新聞熱點
疑難解答