টি এল; ডিআর
হ্যাঁ, তাই নীচের মত হাইবারনেট বুটস্ট্র্যাপ করার আরও ভাল উপায় আছে।
হাইবারনেট-নেটিভ বুটস্ট্র্যাপ
উত্তরাধিকার 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();
জেপিএ বুটস্ট্র্যাপ
আপনি জেপিএ ব্যবহার করে হাইবারনেট বুটস্ট্র্যাপ করতে পারেন:
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
। যাইহোক, SessionFactory
প্রসারিত EntityManagerFactory, so the actual object that's built is a
SessionFactoryImpl` খুব।
উপসংহার
এই দুটি বুটস্ট্র্যাপিং পদ্ধতি হাইবারনেট আচরণকে প্রভাবিত করে। নেটিভ বুটস্ট্র্যাপ ব্যবহার করার সময়, হাইবারনেট লিগ্যাসি মোডে আচরণ করে, যা জেপিএর পূর্বাভাস দেয়।
জেপিএ ব্যবহার করে বুটস্ট্র্যাপিং করার সময়, হাইবারনেট জেপিএ স্পেসিফিকেশন অনুযায়ী আচরণ করবে।
এই দুটি পদ্ধতির মধ্যে বেশ কয়েকটি পার্থক্য রয়েছে:
এই পার্থক্য সম্পর্কে আরও তথ্যের জন্য, JpaCompliance
ক্লাসটি পরীক্ষা করে দেখুন ।