public class Persistence {
/** @deprecated */
@Deprecated
public static final String PERSISTENCE_PROVIDER = "jakarta.persistence.spi.PersistenceProvider";
/** @deprecated */
@Deprecated
protected static final Set<PersistenceProvider> providers = new HashSet();
public Persistence() {
}
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName) {
return createEntityManagerFactory(persistenceUnitName, (Map)null);
}
//Provider에 맞춰서 EntityManagerFactoryBuilderImpl로 EntityManagerFactory를 생성한다.
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
EntityManagerFactory emf = null;
PersistenceProviderResolver resolver = PersistenceProviderResolverHolder.getPersistenceProviderResolver();
List<PersistenceProvider> providers = resolver.getPersistenceProviders();
Iterator var5 = providers.iterator();
while(var5.hasNext()) {
PersistenceProvider provider = (PersistenceProvider)var5.next();
emf = provider.createEntityManagerFactory(persistenceUnitName, properties);
if (emf != null) {
break;
}
}
if (emf == null) {
throw new PersistenceException("No Persistence provider for EntityManager named " + persistenceUnitName);
} else {
return emf;
}
}
}
public class SessionFactoryImpl extends QueryParameterBindingTypeResolverImpl implements SessionFactoryImplementor {
public Session createEntityManager() {
this.validateNotClosed();
return this.buildEntityManager(SynchronizationType.SYNCHRONIZED, (Map)null);
}
private <K, V> Session buildEntityManager(SynchronizationType synchronizationType, Map<K, V> map) {
assert this.status != SessionFactoryImpl.Status.CLOSED;
SessionBuilderImplementor builder = this.withOptions();
((SessionBuilderImplementor)builder).autoJoinTransactions(synchronizationType == SynchronizationType.SYNCHRONIZED);
if (map != null) {
Object tenantIdHint = map.get("org.hibernate.tenantId");
if (tenantIdHint != null) {
builder = (SessionBuilderImplementor)((SessionBuilderImplementor)builder).tenantIdentifier(tenantIdHint);
}
}
Session session = ((SessionBuilderImplementor)builder).openSession();
if (map != null) {
Iterator var5 = map.entrySet().iterator();
while(var5.hasNext()) {
Map.Entry<K, V> o = (Map.Entry)var5.next();
K key = o.getKey();
if (key instanceof String) {
String sKey = (String)key;
if (!"org.hibernate.tenantId".equals(sKey)) {
session.setProperty(sKey, o.getValue());
}
}
}
}
return session;
}
}