在hibernate4.x版本中org.hibernate.cfg.Configuration的getClassMapping(className)方法在hibernate5.x被移除弃用。
工具类方法
import org.hibernate.boot.SessionFactoryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.boot.spi.SessionFactoryBuilderFactory;
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;
public class EntityMetaData implements SessionFactoryBuilderFactory {
private static final ThreadLocal<MetadataImplementor> meta = new ThreadLocal<>();
@Override
public SessionFactoryBuilder getSessionFactoryBuilder(MetadataImplementor metadata, SessionFactoryBuilderImplementor defaultBuilder) {
meta.set(metadata);
return defaultBuilder;
}
public static MetadataImplementor getMeta() {
return meta.get();
}
}
↑我没看懂。
使用PersistentClass
MetadataSources metadataSources = new MetadataSources();
metadataSources.addAnnotatedClass(XXX.class);
Properties properties = new Properties();
properties.put(AvailableSettings.DIALECT, HSQLDialect.class.getName());
BootstrapServiceRegistry bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder()
.build();
StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(bootstrapServiceRegistry);
standardServiceRegistryBuilder.applySettings(properties);
StandardServiceRegistry standardServiceRegistry = standardServiceRegistryBuilder.build();
MetadataBuilder metadataBuilder = metadataSources.getMetadataBuilder(standardServiceRegistry);
Metadata metadata = metadataBuilder.build();
Iterator<PersistentClass> classMappings = metadata.getEntityBindings().iterator();
while (classMappings.hasNext()) {
PersistentClass mapping = classMappings.next();
System.out.println("class name: " + mapping.getClassName() + ", entity name: " + mapping.getEntityName());
}