涉及<hibernate-mapping>和<class>元素的一些配置选项:
1.动态的SQL生成
默认的情况下,Hibernate启动时给每个持久化类创建SQL语句。这些语句是用来读取单个行、删除一行等的简单创建、读取、更新、删除。
<class>映射元素中有两个属性可以禁用启动时CRUD SQL的生成。
<class name="Item" dynamic-insert="true" dynamic-update="true">
……
</class>
其中dynamic-insert属性告诉hibernate是否在SQL INSERT中包括空的属性值,
dynamic-update属性告诉hibernate是否在SQL UPDATE中包括未被修改的属性。
2.使实体不可变
一个特定类的实例可以使不可变的。通过把mutable属性设置为false来映射一个不可变的类,就可以避免脏检查。
<hibernate-mapping default-access="field">
<class name="Bid" mutable="false">
……
</class>
</hibernate-mapping>
3.给查询命名实体
默认情况下,所有类名都自动地导入到Hibernate查询语言(HQL)的命名空间。换句话说,可以在HQL中共使用没有包前缀的短类名,这很方便。然而,如果给定的SessionFactory存在两个同名的类,这两个类可能在领域模型的不同包中,这个自动导入就可以关闭。
如果存在这种冲突,而又不改变默认的设置,Hibernate将不知道你正在HQL中引用哪个类。可以在<hibernate-mapping>根元素中设置autoimport="false",对特定的映射文件把名称的自动导入关闭到HQL命名空间。
实体名称也可以被显式地导入到HQL命名空间。甚至可以导入非显式映射的类和接口,因此短名称可以被用在多态的HQL查询中:
<hibernate-mapping>
<import class="auction.model.Auditabel" rename="IAuditable"/>
</hibernate-mapping>
现在可以用HQL查询(如from IAuditable)来获取实现auction.model.Auditable接口的类的所有持久化实例。注意import元素,就像<hibernate-mapping>所有其他直接的子元素一样,是一个适用于整个应用程序的声明,因此你不必并且不能再其他映射文件中重复它。
4.声明包名称