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来解决更为合理