Hibernate关系映射
2009-09-28 22:47
113 查看
Hibernate关系映射1对1one-to-one: 1对1的关系在现实中很常见。比方说:人和身份证。1个身份证对应着一个身份证,一个身份证对应着一个人。那么,我们就以此为原型。进行代码编写。 建立实体模型如右:
根据模型,创建数据库:
Java代码如下: Person类
Card类:
XML映射文件如下: Person.hbm.xml
今天讲的是one-to-one配置。但是,此处用的是many-to-one,这个是什么原因呢?其实,one-to-one就是特殊的many-to-one。 Card.hbm.xml:
测试代码如下: One2OneTest.java
运行test,测试成功. 在Hibernateone-to-one关系映射中,其实还有一种方式,即:唯一主见关联。但是,我一直倾向于上面的这种形式,所以,唯一主见关联的旧部介绍了。
useHibernateQuickUse; droptableifexistsPerson; droptableifexistsCard; createtableCard( idvarchar(32)primarykey, cardDescvarchar(128)notnull ); createtablePerson( idvarchar(32)primarykey, namevarchar(32)notnull, card_idvarchar(32)notnull, foreignkey(card_id)referencesCard(id) ); |
packageorg.py.hib.relation.one2one; /** *Personentity. */ @SuppressWarnings("serial") publicclassPersonimplementsjava.io.Serializable { privateStringid; privateStringname; privateCardcard; publicPerson() { } publicStringgetId() { returnthis.id; } publicvoidsetId(Stringid) { this.id=id; } publicCardgetCard() { returnthis.card; } publicvoidsetCard(Cardcard) { this.card=card; } publicStringgetName() { returnthis.name; } publicvoidsetName(Stringname) { this.name=name; } } |
packageorg.py.hib.relation.one2one; /** *Cardentity. */ @SuppressWarnings("serial") publicclassCardimplementsjava.io.Serializable { privateStringid; privateStringcardDesc; publicCard() { } publicStringgetId() { returnthis.id; } publicvoidsetId(Stringid) { this.id=id; } publicStringgetCardDesc() { returncardDesc; } publicvoidsetCardDesc(StringcardDesc) { this.cardDesc=cardDesc; } } |
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> cascade="all"column="card_id"/> |
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> |
packageorg.py.hib.relation.one2one; importjunit.framework.Assert;importjunit.framework.TestCase; importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configuration;importorg.junit.After;importorg.junit.Before; publicclassOne2OneTestextendsTestCase{privateSessionFactoryfactory; privateStringm_name="ryanpoy"; privateStringm_name2="ryanpoy2"; privateStringm_cardDesc1="desc_1"; privateStringm_cardDesc2="desc_2"; @BeforepublicvoidsetUp()throwsException{Configurationconf=newConfiguration().configure();factory=conf.buildSessionFactory();} /***测试添加*@throwsException*/publicvoidtestSave()throwsException{System.out.println("/n===testsave==="); Cardcard=newCard();card.setCardDesc(m_cardDesc1); Personperson=newPerson();person.setName(m_name);//设置用户名=m_nameperson.setCard(card); Sessionsession=null;Transactiontran=null;try{session=factory.openSession();tran=session.beginTransaction();session.save(person); tran.commit(); Assert.assertEquals(person.getId()!=null,true);Assert.assertEquals(card.getId()!=null,true); }catch(Exceptionex){tran.rollback();throwex;}finally{if(session!=null){try{session.close();}catch(Exceptionex){//nothingtodo}finally{if(session!=null)session=null;}}}} /***测试查询*@throwsException*/publicvoidtestFind()throwsException{System.out.println("/n===testfind===");Sessionsession=null;try{session=factory.openSession();Personperson=(Person)session.createQuery("fromPerson").list().get(0); Assert.assertEquals(true,person.getId()!=null);Assert.assertEquals(m_name,person.getName()); Assert.assertEquals(true,person.getCard().getId()!=null);Assert.assertEquals(m_cardDesc1,person.getCard().getCardDesc()); }catch(Exceptionex){throwex;}finally{if(session!=null){try{session.close();}catch(Exceptionex){//nothingtodo}finally{if(session!=null)session=null;}}}} /***测试修改*@throwsException*/publicvoidtestModify()throwsException{System.out.println("/n===testmodify===");Sessionsession=null;Transactiontran=null;try{session=factory.openSession();tran=session.beginTransaction(); Personperson=(Person)session.createQuery("fromPerson").list().get(0);person.setName(m_name2);//修改用户名=m_name2.(原来用户名=m_name)person.getCard().setCardDesc(m_cardDesc2);//修改cardDesc为m_cardDesc2(原来是:m_cardDesc1)tran.commit(); }catch(Exceptionex){throwex;}finally{if(session!=null){try{session.close();}catch(Exceptionex){//nothingtodo}finally{if(session!=null)session=null;}}} /**修改后再查询*/System.out.println("/n===testfindaftermodify===");try{session=factory.openSession();Personperson=(Person)session.createQuery("fromPerson").list().get(0); Assert.assertEquals(true,person.getId()!=null);Assert.assertEquals(m_name2,person.getName()); Assert.assertEquals(true,person.getCard().getId()!=null);Assert.assertEquals(m_cardDesc2,person.getCard().getCardDesc()); }catch(Exceptionex){throwex;}finally{if(session!=null){try{session.close();}catch(Exceptionex){//nothingtodo}finally{if(session!=null)session=null;}}}} /***测试删除*@throwsException*/publicvoidtestDelete()throwsException{System.out.println("/n===testdelete===");Sessionsession=null;Transactiontran=null;try{session=factory.openSession();tran=session.beginTransaction(); Personperson=(Person)session.createQuery("fromPerson").list().get(0);session.delete(person);tran.commit(); }catch(Exceptionex){throwex;}finally{if(session!=null){try{session.close();}catch(Exceptionex){//nothingtodo}finally{if(session!=null)session=null;}}} /**删除后再查询*/System.out.println("/n===testfindafterdelete===");try{session=factory.openSession(); Integernum=(Integer)session.createQuery("fromPerson").list().size();Assert.assertEquals(0,num.intValue()); num=(Integer)session.createQuery("fromCard").list().size();Assert.assertEquals(0,num.intValue()); }catch(Exceptionex){throwex;}finally{if(session!=null){try{session.close();}catch(Exceptionex){//nothingtodo}finally{if(session!=null)session=null;}}}} /****/@AfterpublicvoidtearDown()throwsException{factory.close();} } |
相关文章推荐
- Hibernate的映射关系与级联(一对一、一对多、多对多)
- Hibernate(四)---映射关系
- Hibernate关系映射--单向一对一@OneToOne
- hibernate annotation注解方式来处理映射关系
- hibernate关系映射--单向多对多@ManyToMany
- hibernate关系映射管理(一对多,多对一,一对一,多对多)
- Java类型、Hibernate映射类型和SQL类型之间的对应关系
- Hibernate执行流程和关系映射
- 在Hibernate中的一对多的关系的映射如何配置
- Hibernate入门之关系篇:一对一映射
- Hibernate关系映射----单向一对多实例
- Hibernate之关系对象映射详解
- Hibernate表关系映射之一对一映射
- Hibernate入门之关系篇:多对一和一对多映射
- Hibernate中一对多的映射关系实例
- hibernate 关系映射 annotation 版
- Hibernate实体关系映射—Annotation
- (经典)Hibernate多对一关系映射(四)
- 攻城狮在路上(壹) Hibernate(八)--- 映射Hibernate组成关系
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))