Posted on 2008-11-01 10:12
Neil's NoteBook 阅读(102)
评论(0) 编辑 收藏
Hibernate requires a very rich meta-level model of all entity and value
types. From time to time, this model is very useful to the application itself.
For example, the application might use Hibernate's metadata to implement a
"smart" deep-copy algorithm that understands which objects should be copied (eg.
mutable value types) and which should not (eg. immutable value types and,
possibly, associated entities).
Hibernate exposes metadata via the ClassMetadata
and CollectionMetadata
interfaces and the Type
hierarchy. Instances of the metadata interfaces may be
obtained from the SessionFactory
.
Cat fritz = ......;
ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);
Object[] propertyValues = catMeta.getPropertyValues(fritz);
String[] propertyNames = catMeta.getPropertyNames();
Type[] propertyTypes = catMeta.getPropertyTypes();
// get a Map of all properties which are not collections or associations
Map namedValues = new HashMap();
for ( int i=0; i<propertyNames.length; i++ ) {
if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {
namedValues.put( propertyNames[i], propertyValues[i] );
}
}