hibernate入门使用系列 2-- xml关系映射篇(上)
接上篇 hibernate入门使用系列 1-- 说明篇+试用篇
现在起主要讲 hibernate中的关系映射。对应的关系主要有 1:1, n:1, n:n。今天主要写1:1。
关系映射篇(上)—— 之1:1
1对1的关系在现实中很常见。比方说:人和身份证。1个身份证对应着一个身份证,一个身份证对应着一个人。那么,我们就以此为原型。进行代码编写。
建立实体模型如右:
?
根据模型,创建数据库:
今天讲的是one-to-one配置。但是,此处用的是many-to-one,这个是什么原因呢?其实,one-to-one就是特殊的many-to-one。
Card.hbm.xml:
?
测试代码如下:
One2OneTest.java
Card card = new Card(); card.setCardDesc(m_cardDesc1); Person person = new Person(); person.setName(m_name); // 设置用户名 = m_name person.setCard(card); Session session = null; Transaction tran = null; try { session = factory.openSession(); tran = session.beginTransaction(); session.save(person); //应该先执行insert person才对啊???? tran.commit();11 楼 RyanPoy 2009-01-09 only_java 写道在测试你的函数testsave时,结果为:
Hibernate: insert into card (cardDesc, id) values (?, ?)
Hibernate: insert into person (name, card_id, id) values (?, ?, ?)
我照着你的例子重新做的时候,却发现结果是:(报异常)
Hibernate: insert into hibernatequickuse.person (name, card_id) values (?, ?)
Hibernate: update card set NAME=? where ID=?
不同的是主键的生成方式不一样,你用的是uuid,我用的是identity,数据库自动增长
看了你帖的代码。看不出什么问题。不过从生成的sql语句不同。可以看出,你的配置和我的不一样。不是说主键配置不同。肯定还有其他的地方不同。你再看看。
12 楼 only_java 2009-01-12 RyanPoy 写道
only_java 写道
在测试你的函数testsave时,结果为: Hibernate: insert into card (cardDesc, id) values (?, ?) Hibernate: insert into person (name, card_id, id) values (?, ?, ?) 我照着你的例子重新做的时候,却发现结果是:(报异常) Hibernate: insert into hibernatequickuse.person (name, card_id) values (?, ?) Hibernate: update card set NAME=? where ID=? 不同的是主键的生成方式不一样,你用的是uuid,我用的是identity,数据库自动增长 看了你帖的代码。看不出什么问题。不过从生成的sql语句不同。可以看出,你的配置和我的不一样。不是说主键配置不同。肯定还有其他的地方不同。你再看看。
谢谢,问题解决了!sql是我改动了些,但还是保持单向多对一的,原因是我映射文件的头部是引用2.0的Hibernate,而包却是3.0的!