hibernate 映射一:一对一关联

hibernate 映射一:一对一关联
hibernate一对一关联有两种方式:
1.共享主键:限制两个表的主键使用相同的值
2.唯一外键:
如:通常将会员的登陆账号和会员的详细信息分开
3.数据表
login表:
字段名称 数据类型 主键 自增 允许为空 描述
ID int(4) yes ID号
LOGINNAME char(20) yes 登陆账号
LOGINPWD char(20) yes 登陆密码

详细信息company表:
字段名称 数据类型 主键 自增 允许为空 描述
ID int(4) yes 增1 ID号
COMPANGNAME varchar(100) yes 公司名称
TELPHONE char(20) yes 联系电话
EMAIL char(20) yes 邮件
LINKMAN char(20) yes 联系人


4.PO类
Login.java
public class Login implements Serializable{
    private Integer id;
    private String loginName;
    private String loginPwd;
    private Company company;
    public Login(){
    }
}
Company.java
public class Company implements Serializable{
    private Integer id;
    private String companyName;
    private String linkMan;
    private String telphone;
    private String email;
    private Login login;
    public Company(){
    }
}
6.hbm.xml
Login.hbm.xml:
<hibernate-mapping package="com.lhb.vo">
    <class="Login" table="login">
            <id name="id" column="id" type="integer">
                    <!--直接采用外键的属性值,使用foreign标识生成器,达到共享主键目的-->
                    <generator class="foreign">
                            <param name="property">company</param>
                    </generator>
            </id>
            <property name="loginName" column="LOGINNAME' type="String"/>
            <property name="loginPwd" column="LOGINPWD" type="String"/>
            <!--映射login与company一对一关联-->
            <one-to-one name="company" class="com.lhb.Company" constrained="true"/>
    </class>
</hibernate-mapping>

Company.hbm.xml:
<hibernate-mapping package="com.lhb.vo">
    <class="company" table="COMPANY">
        <id name="id"  column="id" type="integer">
                <generator class="identity"/>
        </id>
        <property name="companyName" type="String"/>
            :
            :
        <one-to-one name="login" class="com.lhb.Login" cascade="all" <!--主控类的所有操作,对关联类也执行同样-->
            lazy="false"/>
    </class>
<hibernate-mapping>

你可能感兴趣的:(hibernate 映射一:一对一关联)