user表:
+-----------+------------+-------+------------+--------+
|Field Name | Field Type | size  |  Comment   |  index |
+-----------+------------+-------+------------+--------+
|    id     |   INTEGER  |  11   |  自动编号  |  主键  |
+-----------+------------+-------+------------+--------+
|    bh     |   VARCHAR  |  30   |  用户编号  |  外键  |
+-----------+------------+-------+------------+--------+
|   name    |   VARCHAR  |  20   |  用户姓名  |        |
+-----------+------------+-------+------------+--------+
user_detail表:
+-----------+------------+-------+------------+--------+
|Field Name | Field Type | size  |  Comment   |  index |
+-----------+------------+-------+------------+--------+
|    id     |   INTEGER  |  11   |  自动编号  |  主键  |
+-----------+------------+-------+------------+--------+
|    bh     |   VARCHAR  |  30   |  用户编号  |  外键  |
+-----------+------------+-------+------------+--------+
|  content  |   VARCHAR  |  200  |  备注信息  |        |
+-----------+------------+-------+------------+--------+
我想是这两张表实现外键user.bh = user_detail.bh的一对一关联,如何写hbm.xml和构造函数呢?我看了半天的书,都不明白,请高手帮忙

解决方案 »

  1.   


    public class User implements Serializable {

        private Integer id;    private UserDetail bh;    private String name; /**
     * @hibernate.id
     * column="id"
     * unsaved-value="null"
     * generator-class="sequence"
     * @hibernate.generator-param
     * name="sequence"
     * value="user_seq"
     */
    public Integer getId() {
    return id;
    } public void setId(Integer id) {
    this.id = id;
    } /**
     * @hibernate.many-to-one
     * column="UserDetail_id"
     * cascade="save-update"
     * inverse="true"
     * class="XXXX.XXXXX.UserDetail"
     */
    public UserDetail getBh() {
    return bh;
    } public void setBh(UserDetail bh) {
    this.bh = bh;
    } /**
     * @hibernate.property
     * column="name"
     */
    public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
    }<?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="xxxx.xxxx.User"
            table="User">
             <id name="id"
                column="id"
                type="int"
                unsaved-value="null" >
                <generator class="sequence">
                    <param name="sequence">car_seq</param>
                </generator>
            </id>
            <many-to-one
                name="bh"
                class="xxxx.xxxx.UserDetail"
                cascade="save-update"
                outer-join="auto"
                column="UserDetail_id"
            />
            <property
                name="name "
                type="java.lang.String"
                column="name"
            />User_Detail我就不写了。按照上面写,上面实现的是1对1单向关联,通过User可以User.bh拿到UserDetail.如果要做双向,在User_Detail也添加<many-to-one> 因为<many-to-one>可以表术单向MANY-TO-ONE,ONE一端和ONE-TO-ONE,2端的关系。
      

  2.   

    两个vo类代码:package OneToOne;public class Person {
    private Integer id ;
    private String name ;
    private Integer age ;

    private IDCard idCard ;
    /**
             getter和setter方法省略
            */
    }package OneToOne;public class IDCard {
    private Integer id ;

    private String serial; private Integer expiry; private Person person;        /**
             getter和setter方法省略
            */  
    }Idcard.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">
    <!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
    -->
    <hibernate-mapping>
    <class name="OneToOne.IDCard" table="idcard">
    <id name="id" column="id" type="java.lang.Integer">
    <generator class="foreign">
    <param name="property">person</param>
    </generator>
    </id> <one-to-one name="person"
    class="OneToOne.Person" constrained="true">
    </one-to-one> <property name="serial" type="java.lang.String">
    <column name="serial" length="18" not-null="true" />
    </property>
    <property name="expiry" type="java.lang.Integer">
    <column name="expiry" not-null="true" />
    </property>
    </class>
    </hibernate-mapping>Person.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="OneToOne.Person" table="person">
    <id name="id" type="java.lang.Integer">
    <column name="id"  />
    <generator class="native"></generator>
    </id>
    <property name="name" type="java.lang.String">
    <column name="name" length="20" not-null="true" />
    </property>
    <property name="age" type="java.lang.Integer">
    <column name="age" />
    </property>
    <one-to-one name="idCard"
    class="OneToOne.IDCard" cascade="all"
    outer-join="true">
    </one-to-one>
    </class>
    </hibernate-mapping>