hibernate映射之外键一对一单向

数据模型:

用户信息表(userinfo):

用户登录表(login)

 

对象模型

 

 

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" length="32">
           <generator class="native"></generator>
       </id>
       <property name="uname" column="uname" length="32"></property>
       <property name="usex" column="usex" ></property>
    </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">
         <!-- 主键id自动增长配置 -->
           <generator class="native"></generator>
       </id>
       <property name="lname" column="lname" length="30"></property>
       <property name="lpassword" column="lpassword" length="30" ></property>
       <many-to-one name="userinfo"  column="uid" class="UserInfo" not-null="true" unique="true"
        cascade="save-update" >
       </many-to-one>
    </class>
      
</hibernate-mapping>

 

测试:

    /**
     * @author weidan       2013-2-5 上午11:04:10
     * remark: 外键单项一对一关联增加
     */
    @Test
    public void TestSave(){
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        transaction.begin();
        try{
            UserInfo user = new UserInfo();
            user.setUname("魏丹");
            user.setUsex(true);
            
            Login login = new Login();
            login.setLname("weidan");
            login.setLpassword("weidan");
            login.setUserinfo(user);
            
            session.save(user);
            session.save(login);
            
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
        }finally{
            HibernateUtil.closeSession(session);
        }
        
    }
    
    
    /**
     * @author weidan       2013-2-5 上午11:04:37
     * remark: 单项一对一级联添加
     */
    @Test
    public void TestCascadeSave(){
        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        transaction.begin();
        try{
            UserInfo user = new UserInfo();
            user.setUname("魏丹");
            user.setUsex(false);
            
            Login login = new Login();
            login.setLname("weidan");
            login.setLpassword("weidan");
            login.setUserinfo(user);
            
//            session.save(user);
            session.save(login);//只保存一个对象
            
            transaction.commit();
        }catch(Exception e){
            transaction.rollback();
        }finally{
            HibernateUtil.closeSession(session);
        }
        
    }
    
    
    
    @Test
    public void testFind(){
        Session session = HibernateUtil.getSession();
        Login login = (Login) session.get(Login.class, 3);
        System.out.println("loginName:"+login.getLname());
        System.out.println("loginPassword:"+login.getLpassword());
        System.out.println("userName:"+login.getUserinfo().getUid());
    }

 

出现问题总结:对于性别设置的是boolean值,自动生成表结构的时候生成的是bit(1)类型的数据,但是数据库会报错,解决方案是把类型改成varchar,出错的原因是因为当前版本的jar包不兼容,所以以后实体对象中的boolean值在数据库中用varchar来解决更为合理

 

 

 

 

posted @ 2013-02-04 12:09  虎猫  阅读(189)  评论(0编辑  收藏  举报