<hibernate-mapping
schema="SYSTEM"
default-lazy="true"
default-access="field"
auto-import="false">
</hibernate-mapping>schema:一个数据库Schema前缀SYSTEM能够被Hibernate用给已映射类所生成的所有SQL声明@org.hibernate.annotations.TypeDefs({
@org.hibernate.annotations.TypeDef(
name="monetary_amount_usd",
typeClass=MonetaryAmountType.class,
parameters={@org.hibernate.annotations.Parameter(name="convertTo",value="USD")}
),
@org.hibernate.annotations.TypeDef(
name="monetary_amount_eur",
typeClass=MonetaryAmountType.class,
parameters={@org.hibernate.annotations.Parameter(name="convertTo",value="EUR")}
)
})
@org.hibernate.annotations.NamedNativeQueries({
@org.hibernate.annotations.NamedNativeQuery(
name="findItemsOrderByPrice",
query="select i from Item i order by i.initialPrice")
})
package auction.persistence.types; 包元数据文件的这个例子,在包auction.persistence.types中,它声明了两个Hibernate类型转换器。后面会讨论Hibernate类型系统。<id name="id" type="integer">
<generator class="&idgenerator;" />
</id>&idgenerator;值称作实体点位符。可以在XML文件的顶部定义它的值为实体声明,作为文档类型定义的一部分:<id name="id" type="integer">
<generator class="&idgenerator;" />
</id>当映射文件被读取的时候,XML解析器现在将在Hibernate启动时替换点位符。<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" [ <!ENTITY % globals SYSTEM "classpath://persistence/globals.dtd"> %globals; ]>persistence包里的globals.dtd文件中:
<!ENTITY idgenerator "native">要从Oracle切换到一个不同的数据库系统,只要部署一个不同的globals.dtd文件。
<property name="dateModified"
column="DATE_MOD"
type="timestamp"/>这个文件不需要XML首部或者任何其他标签。现在为一个持久化类把它包括在映射文件中:<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"
[
<!ENTITY dateModified SYSTEM "classpath://model/UserName.xml">
]>
<hibernate-mapping>
<class name="Item" table="TBL_ITEM">
<id ...>
&datemodified;
...
</class>
</hibernate-mapping>DateModified.xml的内容将被&datemodified;点位符包括和替换。当然,这也适用于较大的XML片段。// Get the existing mapping for User from Configuration
PersistentClass userMapping = cfg.getClassMapping(User.class.getName());
// Define a new column for the USER table
Column column = new Column();
column.setName("ADDRESS");// 列名称
column.setNullable(true);// 列是否可为空
// tbl_user表添加address列
userMapping.getTable().addColumn(column);
// SimpleValue包裹Column
SimpleValue value = new SimpleValue(null);
value.setTable(userMapping.getTable());
value.setTypeName("string");
value.addColumn(column);
// 在User类中定义新属性
Property prop = new Property();
prop.setValue(value);
prop.setName("address");
prop.setNodeName(prop.getName());
userMapping.addProperty(prop);
// 创建一个新的SessionFactory工厂,使用新的映射
// 一旦创建了SessionFactory,它的映射就是不可变的
SessionFactory sf = cfg.buildSessionFactory(); PersistentClass对象表示了单个持久类的元模型,你从Configuration对象中获取它。Column、SimpleValue和Property是Hibernate元模型的所有类,可以在org.hibernate.mapping包中使用它们。User user = new User();
user.setUsername("admin");
user.setPassword("bdqn");
ClassMetadata meta = sf.getClassMetadata(user.getClass());
String[] metaPropertyNames = meta.getPropertyNames();
for (String s : metaPropertyNames) {
System.out.println("属性:" + s);
}
Object[] propertyValues = getParamsByEntity(sf, user, EntityMode.POJO);
for (Object o : propertyValues) {
System.out.println("属性值: " + o);
}Hibernate实战_笔记20(全局XML映射元数据、全局的注解元数据、占位符),布布扣,bubuko.com
Hibernate实战_笔记20(全局XML映射元数据、全局的注解元数据、占位符)
原文:http://blog.csdn.net/com185272358/article/details/21242551