टी एल; डॉ
हाँ यही है। निम्नलिखित की तरह, हाइबरनेट को बूट करने के बेहतर तरीके हैं।
हाइबरनेट-देशी बूटस्ट्रैप
लेबर Configurationऑब्जेक्ट का उपयोग करने की तुलना में कम शक्तिशाली है BootstrapServiceRegistryBuilder, हाइबरनेट 4 के बाद से पेश किया गया:
final BootstrapServiceRegistryBuilder bsrb = new BootstrapServiceRegistryBuilder()
.enableAutoClose();
Integrator integrator = integrator();
if (integrator != null) {
bsrb.applyIntegrator( integrator );
}
final BootstrapServiceRegistry bsr = bsrb.build();
final StandardServiceRegistry serviceRegistry =
new StandardServiceRegistryBuilder(bsr)
.applySettings(properties())
.build();
final MetadataSources metadataSources = new MetadataSources(serviceRegistry);
for (Class annotatedClass : entities()) {
metadataSources.addAnnotatedClass(annotatedClass);
}
String[] packages = packages();
if (packages != null) {
for (String annotatedPackage : packages) {
metadataSources.addPackage(annotatedPackage);
}
}
String[] resources = resources();
if (resources != null) {
for (String resource : resources) {
metadataSources.addResource(resource);
}
}
final MetadataBuilder metadataBuilder = metadataSources.getMetadataBuilder()
.enableNewIdentifierGeneratorSupport(true)
.applyImplicitNamingStrategy(ImplicitNamingStrategyLegacyJpaImpl.INSTANCE);
final List<Type> additionalTypes = additionalTypes();
if (additionalTypes != null) {
additionalTypes.stream().forEach(type -> {
metadataBuilder.applyTypes((typeContributions, sr) -> {
if(type instanceof BasicType) {
typeContributions.contributeType((BasicType) type);
} else if (type instanceof UserType ){
typeContributions.contributeType((UserType) type);
} else if (type instanceof CompositeUserType) {
typeContributions.contributeType((CompositeUserType) type);
}
});
});
}
additionalMetadata(metadataBuilder);
MetadataImplementor metadata = (MetadataImplementor) metadataBuilder.build();
final SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder();
Interceptor interceptor = interceptor();
if(interceptor != null) {
sfb.applyInterceptor(interceptor);
}
SessionFactory sessionFactory = sfb.build();
जेपीए बूटस्ट्रैप
आप JPA का उपयोग करके हाइबरनेट बूटस्ट्रैप भी कर सकते हैं:
PersistenceUnitInfo persistenceUnitInfo = persistenceUnitInfo(getClass().getSimpleName());
Map configuration = properties();
Interceptor interceptor = interceptor();
if (interceptor != null) {
configuration.put(AvailableSettings.INTERCEPTOR, interceptor);
}
Integrator integrator = integrator();
if (integrator != null) {
configuration.put(
"hibernate.integrator_provider",
(IntegratorProvider) () -> Collections.singletonList(integrator));
}
EntityManagerFactoryBuilderImpl entityManagerFactoryBuilder =
new EntityManagerFactoryBuilderImpl(
new PersistenceUnitInfoDescriptor(persistenceUnitInfo),
configuration
);
EntityManagerFactory entityManagerFactory = entityManagerFactoryBuilder.build();
इस तरह, आप EntityManagerFactoryएक के बजाय निर्माण कर रहे हैं SessionFactory। हालाँकि, SessionFactoryImpl` को भी SessionFactoryबढ़ाता EntityManagerFactory, so the actual object that's built is aहै।
निष्कर्ष
ये दो बूटस्ट्रैपिंग तरीके हाइबरनेट व्यवहार को प्रभावित करते हैं। देशी बूटस्ट्रैप का उपयोग करते समय, हाइबरनेट विरासत मोड में व्यवहार करता है, जो जेपीए से पहले होता है।
जब JPA का उपयोग कर बूटस्ट्रैपिंग की जाती है, तो हाइबरनेट JPA विनिर्देश के अनुसार व्यवहार करेगा।
इन दो तरीकों के बीच कई अंतर हैं:
इन अंतरों के बारे में अधिक जानकारी के लिए, JpaComplianceकक्षा देखें।