私は、Hibernate 3から5.2.3に移行しようとしていて、多くの古いコードでorg.hibernate.SessionFactory.getAllClassMetadata
を呼び出しています。このメソッドはHibernate 5では廃止されました。SessoinFactory.getMetaModel()
私はこのメソッドを呼び出すときに、あまりにも非難されているようだ、私は研究を続け、使用するように示唆された他の方法を見つけることができない、誰も助けることができますか?細部までご利用いただければ幸いです。ありがとうございます。ここでHibernate 5.2.3 SessionFactory.getAllClassMetadataはサポートされなくなりました
がgetAllClassMetadataの使い方です:
@Override
public Collection<ModelSpecificationSummary> findAllModelSpecificationSummaries() throws RepositoryException {
List<ModelSpecificationSummary> summaries = new ArrayList<ModelSpecificationSummary>();
try {
Query query = session.createQuery(
"selecc.name, spec.class from " + Specification.class.getSimpleName() + " spec");
List<Object[]> list = query.list();
SingleTableEntityPersister metadata = (SingleTableEntityPersister) session.getSessionFactory()
.getAllClassMetadata()
.get(Specification.class.getName());
for (Object[] o : list) {
Long id = (Long) o[0];
String name = (String) o[1];
String discriminator = (String) o[2];
Class<? extends ModelSpecification> specificationClass = lookupSpecificationSubclass(metadata, discriminator);
ModelSpecificationSummary summary = new ModelSpecificationSummary(id, name, specificationClass);
summaries.add(summary);
}
return summaries;
}
catch (HibernateException he) {
throw new RepositoryException(he);
}
}
とlookupSpecificationSubclassクラス:
private Class<? extends ModelSpecification> lookupSpecificationSubclass(SingleTableEntityPersister metadata,
String discriminator)
throws RepositoryException {
Class<? extends ModelSpecification> specificationClass = null;
String subclass = metadata.getSubclassForDiscriminatorValue(discriminator);
if (subclass != null) {
try {
specificationClass = (Class<? extends ModelSpecification>) Class.forName(subclass);
}
catch (ClassNotFoundException e) {
throw new RepositoryException("Invalid class found for specification " + discriminator, e);
}
}
else {
throw new RepositoryException("No class found for specification " + discriminator);
}
return specificationClass;
}
ので、どのように私はSessionFactory#getAllClassMetadata
ドキュメントによるとEntityManagerFactory.getMetamodel()
これをチェックすることができます:: http://stackoverflow.com/questions/43604928/hibernate-upgrade-to-5-2-session-factory-creation-and-replacing-persistentclas/43718626 –