hibernate映射之主键双向一对一

数据模型:

stuinfo表

login表

 

实体对象模型

UserInfo 
    private int uid;
    private String uname;
    private boolean usex;
    private Login login;

 

Login
    private int lid;
    private String lname;
    private String lpassword;
    private UserInfo userinfo;

 

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 package="com.skyedu.bean">
    <class name="UserInfo" table="userinfo">
       <id name="uid" column="uid" >
           <generator class="native"></generator>
       </id>
       <property name="uname" column="uname" length="32"></property>
       <property name="usex" column="usex" ></property>
       <one-to-one name="login" class="Login" cascade="save-update"></one-to-one>
    </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 package="com.skyedu.bean">
    <class name="Login" table="login">
       <id name="lid" column="lid" >
             <generator class="foreign">
                <param name="property">userinfo</param>
             </generator>
       </id>
       <property name="lname" column="lname" length="30"></property>
       <property name="lpassword" column="lpassword" length="30" ></property>
       <one-to-one name="userinfo" class="UserInfo" constrained="true"
        cascade="save-update" ></one-to-one>
    </class>
</hibernate-mapping> 

附录解释

 

测试:

    @Test
    public void save(){
        Session session= HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        try{
            UserInfo userinfo = new  UserInfo();
            userinfo.setUname("魏丹");
            userinfo.setUsex(true);
            
            
            Login login = new Login();
            login.setLname("weidan");
            login.setLpassword("weidan");
            login.setUserinfo(userinfo);//这个顺序不能反,应为userinfo需要先保存
            
            session.save(login);
            
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
        }finally{
            session.close();
        }
    }
    
    @Test
    public void find(){
        Session session= HibernateUtil.getSession();
        UserInfo userinfo =  (UserInfo) session.get(UserInfo.class,6);
        System.out.println("loginName:"+userinfo.getLogin().getLname());
        System.out.println("userName:"+userinfo.getUname());
    }
    
    
    

//    public static void main(String[] args) {
//        HibernateUtil.createTable();
//    }
    
    

总结:

     单向主键共享和双向主键共享比较

在依赖主键的一方是一样的配置,但是在另一方要加上one-to-one的配置

 

 

posted @ 2013-02-04 15:16  虎猫  阅读(174)  评论(0编辑  收藏  举报