lhd0 2012-06-04
前言:对于Hibernate映射文件的详解网上多的是,本篇笔记只是对映射文件中一些细节做了一些记录。
1.一个持久化类可以写在一个映射文件中(推荐用法),也可以将多个持久化类写在一个映射文件中。
2.<class>元素的table属性没有设定时,Hibernate会以类名,也就是name属性的值作为与之关联的表名
3.<property>元素的type属性指定了Hibernate的映射类型,我们如何能够确定这个type的值呢?首先确定
这个<property>元素中的name属性的值在类中和表中分别对应的类型是什么,然后查看有关类型对应关系的表格,
找到两种类型同时指向的那个Hibernate类型即可
4.如果数据库中的某个字段不允许为空,而与之对应的<property>元素的没有设置not-null属性为true时,那么,
在持久化这个类时不会先检查这个属性是否为空,而是在执行数据库操作时才会检查,那时将抛出错误。所以最好
将not-null写上
5.<property>元素的access属性用于指定Hibernate访问持久化类的属性的方式。如果access的值为property,则 是通过 get,set方法对类中的属性进行访问的。如果值为field,那么Hibernate将运用java反射机制直接访问类的属 性。例如 Customer类中的name属性没有提供get和set方法,那么就可以将access的值设置为field,使 Hibernate直接访问那么 属性。在就此举个例子:如有以下一个类
private String firstname;
private String lastname;
public String getName(){return firstname+lastname;}
public void setName(String name){}
现在执行Query query=session.createQuery("from Customer as c where c.name='tom'");
如果映射文件中使用的是<property name="name" column="NAME"/>那么不会报错,因为Hibernate访问的事getName和setName方法。
但是如果映射文件中使用的是<property name="name" column="NAME" access=“field"/>那么会报错,因为Hibernate访问的事类中的name属性,但是在属性中并没有name属性。