【Hibernate】实体映射文件--标签了解
Hibernate的实体映射文件一般命名规则是name.hbm.xml。另外需要在文件中加入约束:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
hibernate-mapping
hibernate-mapping是一级标签,所有的配置都需要在其内部设置,并且只允许有一个hibernate-mapping。
class
class是映射的实体类,需要指定实体的全路径。
database-object
database-object是辅助数据库对象,用于针对数据库的触发器、存储过程的创建和销毁等工作。
有两种模式,一种是文件中直接显示定义
<database-object>
<create>CREATE TRIGGER my_trigger ...</create>
<drop>DROP TRIGGER my_trigger</drop>
</database-object>
一种则是提供一个类,这个类知道如何组织创建和销毁命令,并且,这个类必须继承org.hibernate.mapping.AuxiliaryDatabaseObject接口
<database-object>
<definition class="MyTriggerDefinition"/>
</database-object>
filter-def
filter-def是配置过滤器的标签,用于指定过滤器filter
import
import是引用其他类,假设你的应用程序有两个同样名字的持久化类,但是你不想在Hibernate查询中使用他们的全限定名,那么类可以被显示地引用:
<import class="java.lang.Object" rename="Universe"/>
甚至可以引用没有被明确定义类和接口:
<import
class="ClassName" (1)
rename="ShortName" (2)
/>
joined-subclass
joined-subclass是连接地子类,即每个子类可能被映射到他自己的表中(每个子类一个表的策略),被继承的状态通过和超类的表关联得到,在继承映射中可能会用到。
<joined-subclass
name="ClassName"
table="tablename"
proxy="ProxyInterface"
lazy="true|false"
dynamic-update="true|false"
dynamic-insert="true|false"
schema="schema"
catalog="catalog"
extends="SuperclassName"
persister="ClassName"
subselect="SQL expression"
entity-name="EntityName"
node="element-name">
<key .... >
<property .... />
.....
</joined-subclass>
meta
meta用来定义其他元数据。
query
query可以用来配置查询的sql语句,避免硬编码。
resultset
resultset是可以将结果集合进行处理的,一般与query查询关联出现。
sql-query
sql-query与query作用相同,是hibernate的原生sql
subclass
subclass是子类,joined-subclass属于其中的一种。
typedef
typedef是为了方便简写,当某种情况一直需要使用某个实体类,可以通过typedef定义一个简称,从而减轻书写压力。
union-subclass
union-subclass属于subclass的一种,也是在继承映射中使用的,称为联合子类,仅仅映射类继承树中具体类部分到表中(每个具体类一张表的策略)。如果你想使用多态关联(例如,一个对类继承树中超类的关联),你需要使用<union-subclass>映射。