Hibernate关系映射是1对1one-to-one。
1对1的关系在现实中很常见。比方说:人和身份证。1个身份证对应着一个身份证,一个身份证对应着一个人。那么,我们就以此为原型。进行代码编写。
建立实体模型如右:
useHibernateQuickUse; createtableCard( createtablePerson( |
Java代码如下:
Person类
packageorg.py.hib.relation.one2one; /** @SuppressWarnings("serial") privateStringname; privateCardcard; publicPerson() publicStringgetId() publicvoidsetId(Stringid) publicCardgetCard() publicvoidsetCard(Cardcard) publicStringgetName() publicvoidsetName(Stringname) } |
Card类:
packageorg.py.hib.relation.one2one; /** @SuppressWarnings("serial") privateStringcardDesc; publicCard() publicStringgetId() publicvoidsetId(Stringid) publicStringgetCardDesc() publicvoidsetCardDesc(StringcardDesc) |
XML映射文件如下:
Person.hbm.xml
|
今天讲的是one-to-one配置。但是,此处用的是many-to-one,这个是什么原因呢?其实,one-to-one就是特殊的many-to-one。
Card.hbm.xml:
|
#p#
测试代码如下:
One2OneTest.java
packageorg.py.hib.relation.one2one; importjunit.framework.Assert; importorg.hibernate.Session; publicclassOne2OneTestextendsTestCase privateStringm_name="ryanpoy"; privateStringm_name2="ryanpoy2"; privateStringm_cardDesc1="desc_1"; privateStringm_cardDesc2="desc_2"; @Before /** Cardcard=newCard(); Personperson=newPerson(); Sessionsession=null; tran.commit(); Assert.assertEquals(person.getId()!=null,true); }catch(Exceptionex) /** Assert.assertEquals(true,person.getId()!=null); Assert.assertEquals(true,person.getCard().getId()!=null); }catch(Exceptionex) /** Personperson=(Person)session.createQuery("fromPerson").list().get(0); }catch(Exceptionex) /* Assert.assertEquals(true,person.getId()!=null); Assert.assertEquals(true,person.getCard().getId()!=null); }catch(Exceptionex) /** Personperson=(Person)session.createQuery("fromPerson").list().get(0); }catch(Exceptionex) /* Integernum=(Integer)session.createQuery("fromPerson").list().size(); num=(Integer)session.createQuery("fromCard").list().size(); }catch(Exceptionex) /** } |
运行test,测试成功.
在Hibernateone-to-one关系映射中,其实还有一种方式,即:唯一主见关联。但是,我一直倾向于上面的这种形式,所以,唯一主见关联的旧部介绍了。
您正在阅读: Hibernate入门教程 Hibernate关系映射详解【编辑推荐】