domain对象.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hsp.domain">
<class name="Employee" table="employee">
<!-- id元素用于指定主键属性 -->
<id name="id" column="id" type="java.lang.Integer">
<!-- 该元素用于指定主键值生成策略hilo native increment sequence uuid -->
<generator class="sequence"> <!--主键生成策略要根据连接的数据库来修改-->
<param name="sequence">emp_seq</param>
</generator>
</id>
<!-- 对其它属性还有配置 -->
<property name="name" type="java.lang.String">
<column name="name" not-null="false" />
</property>
<property name="email" type="java.lang.String" >
<column name="email" not-null="false"/>
</property>
<property name="hiredate" type="java.util.Date">
<column name="hiredate" not-null="false" />
</property>
</class>
</hibernate-mapping>
1、domain对象的细节
(1)需要一个无参的构造函数(用于hibernate反射该对象)
(2)应当有一个无业务逻辑的主键属性.
(3)给每个属性提供 get set方法.
(4)在domian对象中的属性,只有配置到了对象映射文件后,才会被hiberante管理.
(5)属性一般是private范围
对对象关系映射文件的说明
对象关系文件中,有些属性是可以不配,hibernate会采用默认机制,比如
<class table=”?” > table 值不配,则以类的小写做表名
<property type=”?”> type不配置,则hibernate会根据类的属性类型,选择一个适当的类型
hibernate对象的三种状态,转换图:
如果判断一个对象处于怎样的状态?
主要的依据是: 1. 看该对象是否处于session, 2, 看在数据库中有没有对应的记录
瞬时态: 没有session管理,同时数据库没有对应记录
持久态: 有session管理,同时在数据库中有记录
脱管态/游离态: 没有session管理,但是在数据库中有记录.
关系映射
附加一个级联操作,cascade,一般配置在one的那一方的配置文件,操作该对象时,同时会自动对其相关联的对象进行操作。
1、one to many(部门与员工)
2、many to one(员工与部门)
3、one to one(人与身份证)
A、基于主键的一对一(外键使用时配上foreign表示使用主键和外键为同一个,constrained为false时,不会显示外键,当constrained为true时,显示外键)
B、基于外键的一对一(转换成many to one的特例,必须使用时加上unique来确保外键唯一性)
4、many to many