您的位置:首页 > 其它

hibernate映射之外键一对一双向

2013-02-04 12:50 309 查看
数据模型



对象模型



对象模型

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" length="32">
<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" property-ref="userinfo" ></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">
<!-- 主键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, 8);
System.out.println("loginName:"+login.getLname());
System.out.println("loginPassword:"+login.getLpassword());
System.out.println("userName:"+login.getUserinfo().getUid());
}

@Test
public void testFind2(){
Session session = HibernateUtil.getSession();
UserInfo user = (UserInfo) session.get(UserInfo.class, 6);
System.out.println("loginName:"+user.getLogin().getLname());
System.out.println("loginPassword:"+user.getLogin().getLpassword());
System.out.println("userName:"+user.getUid());
}

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


总结:

单项一对一外键关联和双向一对一外键关联比较:

数据模型完全相同

被唯一限制的多的一方的配置两个是完全一样的,但是在另一端是需要改变的需要加one-to-one

对象模型中少的一段需要改变加入对方的引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: