生词
在set里的inverse(维护)用来设计关系由哪一方维护,inverse=true表示被控方,=false代表主控方
在one-to-one里的constraint(约束),默认值为false,值为true时,表明该表ID为外键
在gennerator里的class属性foreign(外键),表明其主键是外键
在set里的cascade级联属性:save-update,delete,all,none(默认值)
increment,先查询数据库主键最大值出来,然后主键在最大值+1
identity,只要创建过id主键,就存在id,被删除了也存在
OID:
Object Identifier,对象标识符,数据库中的主键,Java对象模型中的等价物
由ORM配置文件中的class元素的id元素的generator子元素来指定OID的生成器
OID一般时整数类型,hibernate允许在持久化类定义OID为short,integer,long类型
ORM:
object relational mapping,对象关系映射,在类中的对象及其变量和数据库表中的数据对象和数据元素之间建立映射联系。
hibernate框架优点:
实现了orm更方便的操作数据库,封装了sql语句代码,更加方便
<class>
<id>
<generator>//子元素用来指定oid的生成器
<property>
<one-to-one>和<set>和<many-to-one>
<set>的使用一般在有set集合的one里面
一对一主键关联:(两个主键相关联,将外键表的主键当成外键)
主键表User.hbm.xml
<one-to-one name="person" class="Person" cascade="all"/>
外键表Person.hbm.xml
<id name="id" >
//class="foreign"为了确保两个对象的主键值是相等的
<generator class="foreign" >
//表明外键对应的主键为user的id
<param name="property">user</param>
</generator>
</id>
//在one-to-one里的constraint(约束),默认值为false,值为true时,表明该表ID为外键
<one-to-one name="user" constrained="true" />
constraint(约束),默认值为false,只在one-to-one的映射中使用,表明id为外键
一对一外键关联:(外键必须设置unique约束)(外键参照主键)
主键表(PERSON)
<one-to-one name="user" property-ref="person"/>
外键表(USER)
<many-to-one name="person" column="PERSONID" cascade="all" unique="true"/>
一对多:(外键参照主键,many参照one)
外键一般放在多方,不然控制台会打印update语句,影响性能
主键表(USER)存在外键表(Order)的引用集合set
private Set orderSet = new HashSet<Order>();
主键表User.hbm.xml
<set name="orderSet" cascade="delete">
<key column="USERID"/>
<one-to-many class="Order" />
</set>
一对多:双向
外键表Order.hbm.xml
<many-to-one name="user"(需映射的属性名) column="USERID" class="User"(所关联的类型)/>
多对多:(需要额外的表来放置外键)(没一对多常用)
主键表Student.hbm.xml
<set name="courseSet" table="STUDENTCOURSE" inverse="false">
<key column="STUDENTID"/>
<many-to-many class="Course" column="COURSEID"/>
</set>
外键表Course.hbm.xml
<set name="studentSet" table="STUDENTCOURSE" inverse="true">
<key column="COURSEID"/>
<many-to-many class="Student" column="STUDENTID"/> </set>