浏览 9111 次
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-12-03
以 Teacher(老师); / Subject(科目)为例 1.常见的标记都是用来把字段映射到pojo对象的属性.这类标记暂叫“映射标记”. 1.1 映射标记的column属性即表示与哪个字段映射。多个column可用column子标记。 1.2 字段映射到属性时,有下面两种情况: (1);一个字段对应一个属性,属性可为简单类型,也可为自定义class(MyClass) (2);多个字段对应一个属性,属性为自定义class(MyClass) 对于(1):典型的标记为id ,property eg. <id name="cardId" column="CARD_ID" type="long"><!--teacher的key--> <property name="name" column="Name" type="string"/><!--teacher的名字属性--> 这两个标记就可以搞定一张简单的表。 extend: 用自定义的类Card来作属性的类型,为 <id name="card" column="CARD_ID" type="db.CARD"> 自定义类Card须实现一个接口:UserType或者CompositeUserType public class Card implements UserType{} 对于(2):典型的标记为composite-id + key-property | key-many-to-one , eg. <!--subject的key--> <composite-id name="pk" class="db.SubjectPK"> <key-property name="teacherId" column="TEACHER_ID" type="long"/> <key-property name="subjectId" column="SUBJECT_ID" type="long"/> </composite-id> key-many-to-one与many-to-one很像,见many-to-one 对于(2):非 典型的标记有:component+property,many-to-one,key-many-to-one component将部分property集中到一个class中 eg: <!-subject的book属性--> <component name="book" class="Book"> <property name="mainBook" column="MAIN_BOOK" type="string"/> <property name="subBook" column="SUB_BOOK" type="string"/> </component> component和CompositeUserType的区别是: component是一个普通的bean,可简单地 看 作 是把部分属性集合成一个class CompositeUserType则是hibernate认可地,基本类型可用的地方,它就可用,比如type="MyCompositeUserType"。 当属性的类型为另一个数据库表的pojo时,映射关系就由“字段--属性对应”变为“表--表对应” <!-subject的teacher属性--> <many-to-one name="teacher" class="db.Teacher" update="false" insert="false"> <column name="TEACHER_ID"/> </many-to-one> 1.如果将many-to-one移到composite-id中,那么就用key-many-to-one <composite-id name="pk" class="db.SubjectPK"> <key-many-to-one name="teacher" class="db.Teacher" column="SUBJECT_ID"/> <key-property name="subjectId" column="SUBJECT_ID" type="long"/> </composite-id> 2.如果用自定义的类型代替pojo Teacher,那么就成为: <property name="teacher" class="db.TeacherUserType" update="false" insert="false"> <column name="TEACHER_ID"/> </property> 此时就是一个简单的“字段--属性对应” extend:one-to-one与many-to-one不同,它不能将字段映射为属性,因为one-to-one的关系是表的key与其他表的字段的关系, 而key是由id,composite-id等标记来映射到属性的。one-to-one属于“关系标记”。 1.3 在利用pojo对象进行数据库操作时,pojo的每个属性会精确地还原为一个字段。 一个pojo对象的属性的属性也可以 看 作 是pojo的属性。 例外:如果一个标记的update="false",那么在 做 数据库的update操作时,不会考虑该标记所属的属性,即这些属性 对应的字段不会因为这些属性的值 改 变 而 改 变 。 标记的insert="false"有同功。 有update和insert属性的“映射标记”:property many-to-one component dynamic-component 1.4 映射标记 要 遵 循 的准则: (1)一个字段不可与多个(>1)属性对应。 (2)如果一个字段与多个属性对应,则要保证其中只有一个属性的update="true", insert="true"。 这条限制是基于一个事实:在sql中update语句不能set一个字段两次,不然会报“duplicate column name”错; insert同理。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-12-03
看到帖子加精,高兴。
看hibernate一个月了,用它也有半年了,整理下思路。 昨天注的册,“注册后三十天才可发帖”的规矩我第一次看到,本论坛有,其它没看到过。没办法,死皮赖脸去找robbin,让加权限,没想robbin这么快就给我办了,佩服的五体投地。 总共写了4篇,还有几篇没动笔。 |
|
返回顶楼 | |