hibernate一对一例子



hibernate一对一例子

一对一

持久化对象之间一对一的关联关系是通过one-to-one元素定义的。

<one-to-one name=”propertyName”
(1) class=”ClassName”
(2) cascade=”cascade_style”
(3) constrained=”true|false”
(4) fetch=”join|select”
(5) property-ref=”propertyNameFromAssociatedClass”
(6) access=”field|property|ClassName”
(7) formula=”any SQL expression”
(8) lazy=”true|proxy|false”
(9) entity-name=”EntityName”
(10) node=”element-name|@attribute-name|element/@attribute|.” embed-xml=”true|false” />
(1)
name: 属性的名字。

(2)
class (可选 – 默认是通过反射得到的属性类型):被关联的类的名字。

(3)
cascade(级联) (可选) 表明操作是否从父对象级联到被关联的对象。

(4)
constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。 这个选项影响save()和delete()在级联执行时的先后顺序以及 决定该关联能否被委托(也在schema export tool中被使用).

(5)
fetch (可选 – 默认设置为选择): 在外连接抓取或者序列选择抓取选择其一.

(6)
property-ref: (可选) 指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。

(7)
access (可选 – 默认是 property): Hibernate用来访问属性的策略。


(8)
formula (可选):绝大多数一对一的关联都指向其实体的主键。在一些少见的情况中, 你可能会指向其他的一个或多个字段,或者是一个表达式,这些情况下,你可以用一个SQL公式来表示。 (可以在org.hibernate.test.onetooneformula找到例子)

(9)
lazy (可选 – 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy=”true”指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。 lazy=”false”指定此关联总是被预先抓取。注意,如果constrained=”false”, 不可能使用代理,Hibernate会采取预先抓取!

(10)
entity-name (可选): 被关联的类的实体名。

具体配置可以看

http://www.huihoo.com/framework/hibernate/reference-v3_zh-cn/mapping.html

好。。再来测试。。。
1.建表
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. create table student
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..(sid varchar ( 32 ) not null primary key ,
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. sname varchar ( 16 ),
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. sage varchar ( 16 )
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. create table address
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..(aid varchar ( 32 ) not null primary key ,
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..acity varchar ( 16 ),
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..aroad varchar ( 16 )
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
2.写VO
Address vo
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..package com.test;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..public class Address
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private String aid;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private String acity;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private String aroad;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private Student student;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. //写上GET SET方法
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
Student vo
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..package com.test;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..public class Student
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private String sid;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private String sname;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private String sage;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. private Address address;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..//写上get set

3.写配置文件
Student.hbm.xml
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..<?xml version=”1.0″?>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..<!DOCTYPE hibernate-mapping
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. PUBLIC “-//Hibernate/Hibernate Mapping DTD//EN”
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. “http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..<hibernate-mapping>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <class name=”com.test.Student” table=”student” >
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <id name=”sid” type=”string” unsaved-value=”null” >
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <column name=”sid” sql-type=”char(32)” not-null=”true”/>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <generator class=”uuid.hex”/>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </id>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <property name=”sname”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <column name=”sname” sql-type=”varchar(16)” />
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </property>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <property name=”sage”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <column name=”sage” sql-type=”varchar(16)” />
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </property>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <one-to-one name=”address” class=”com.test.Address” cascade=”all”/>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </class>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..</hibernate-mapping>
Address.hbm.xml
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..<?xml version=”1.0″?>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..<!DOCTYPE hibernate-mapping
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. PUBLIC “-//Hibernate/Hibernate Mapping DTD//EN”
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. “http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..<hibernate-mapping>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <class name=”com.test.Address” table=”address” >
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <id name=”aid” type=”string” unsaved-value=”null” >
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <column name=”aid” sql-type=”char(32)” not-null=”true”/>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <generator class=”foreign”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <param name=”property”>student</param>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </generator>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </id>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <property name=”acity”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <column name=”acity” sql-type=”varchar(16)” />
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </property>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <property name=”aroad”>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <column name=”aroad” sql-type=”varchar(16)” />
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </property>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. <one-to-one name=”student” class=”com.test.Student”/>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. </class>
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..</hibernate-mapping>

接着把下面的hibernate.properties文件拷到classes目录下。。这里用的是mysql
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.query.substitutions true 1, false 0, yes ‘Y’, no ‘N’
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..## MySQL
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.connection.url jdbc:mysql://localhost:3306/wjcms
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.connection.username root
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.connection.password wujun
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.connection.pool_size 1
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.proxool.pool_alias pool1
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.show_sql true
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.jdbc.batch_size 0
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.max_fetch_depth 1
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..hibernate.cache.use_query_cache true
4.写测试类了..

hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..package com.test;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..import net.sf.hibernate.Session;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..import net.sf.hibernate.SessionFactory;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..import net.sf.hibernate.cfg.Configuration;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..import net.sf.hibernate.*;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..import java.sql.*;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..import java.util.List;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..public class TestOneToOne
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. SessionFactory sf;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Session session;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. public TestOneToOne()
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. try
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Configuration cfg = new Configuration();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. sf = cfg.addClass(Student.class).addClass(Address.class).buildSessionFactory();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. catch(HibernateException ex)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. ex.printStackTrace();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. public void doCreate()
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. try
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session = sf.openSession();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Student student = new Student();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. student.setSname(“小王”);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. student.setSage(“22″);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Address address = new Address();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. address.setAcity(“深圳”);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. address.setAroad(“深南”);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. address.setStudent(student);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. student.setAddress(address);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session.save(student);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session.flush();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session.connection().commit();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. catch(HibernateException ex)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. ex.printStackTrace();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. catch(SQLException ex1)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. ex1.printStackTrace();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. finally
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. try{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session.close();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. catch(HibernateException ex2){
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. public void doQuery()
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. try{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session = sf.openSession();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Query q = session.createQuery(“select s from Student as s”);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. List l = q.list();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Student s = null;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. Address address = null;
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. for(int i=0;i<l.size();i++)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. s = (Student)l.get(i);
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. System.out.println(“姓名: “+s.getSname());
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. System.out.println(“年龄: “+s.getSage());
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. address = s.getAddress();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. System.out.println(“住址: “+address.getAcity()+address.getAroad());
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. catch(HibernateException ex){
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. ex.printStackTrace();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. finally{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. try{
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. session.close();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. catch(HibernateException ex2){
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. public static void main(String[] args)
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. {
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. TestOneToOne t = new TestOneToOne();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. //t.doCreate();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. t.doQuery();
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^).. }
hibernate一对一例子 – 八尺琼 – 思灵月..(^_^)..}