Hibernate 浅谈之对象-关系映射文件

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属性。

相关推荐

LetonLIU / 0评论 2020-05-29
东方咖啡屋 / 0评论 2020-01-06