Java tutorial
/******************************************************************************* * Copyright (c) 2005, 2014 springside.github.io * * Licensed under the Apache License, Version 2.0 (the "License"); *******************************************************************************/ package com.topsem.common.repository.jpa.hibernate; import org.apache.commons.lang3.StringUtils; import org.hibernate.Cache; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.dialect.*; import org.hibernate.jpa.HibernateEntityManagerFactory; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class Hibernates { /** * Initialize the lazy property value. * * e.g. Hibernates.initLazyProperty(user.getGroups()); */ public static void initLazyProperty(Object proxyedPropertyValue) { Hibernate.initialize(proxyedPropertyValue); } /** * DataSource?connection, ?connectionmetadatajdbcUrlDialect. * ?Oracle, H2, MySql, PostgreSql, SQLServer? */ public static String getDialect(DataSource dataSource) { String jdbcUrl = getJdbcUrlFromDataSource(dataSource); // ?jdbc urldialect if (StringUtils.contains(jdbcUrl, ":h2:")) { return H2Dialect.class.getName(); } else if (StringUtils.contains(jdbcUrl, ":mysql:")) { return MySQL5InnoDBDialect.class.getName(); } else if (StringUtils.contains(jdbcUrl, ":oracle:")) { return Oracle10gDialect.class.getName(); } else if (StringUtils.contains(jdbcUrl, ":postgresql:")) { return PostgreSQL82Dialect.class.getName(); } else if (StringUtils.contains(jdbcUrl, ":sqlserver:")) { return SQLServer2008Dialect.class.getName(); } else { throw new IllegalArgumentException("Unknown Database of " + jdbcUrl); } } private static String getJdbcUrlFromDataSource(DataSource dataSource) { Connection connection = null; try { connection = dataSource.getConnection(); if (connection == null) { throw new IllegalStateException("Connection returned by DataSource [" + dataSource + "] was null"); } return connection.getMetaData().getURL(); } catch (SQLException e) { throw new RuntimeException("Could not get database url", e); } finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { } } } } /** * ?jpa EntityManager ? hibernate Session API * * @param em * @return */ public static Session getSession(EntityManager em) { return (Session) em.getDelegate(); } /** * ?jpa EntityManager ? hibernate SessionFactory API * * @param em * @return * @see #getSessionFactory(javax.persistence.EntityManagerFactory) */ public static SessionFactory getSessionFactory(EntityManager em) { return getSessionFactory(em.getEntityManagerFactory()); } /** * ?jpa EntityManagerFactory ? hibernate SessionFactory API * * @param emf * @return */ public static SessionFactory getSessionFactory(EntityManagerFactory emf) { return ((HibernateEntityManagerFactory) emf).getSessionFactory(); } /** * ? jpa EntityManager ?hibernate Cache API * * @param em * @return * @see #getCache(javax.persistence.EntityManagerFactory) */ public static Cache getCache(EntityManager em) { return getCache(em.getEntityManagerFactory()); } /** * ?jpa EntityManagerFactory ? hibernate Cache API * * @param emf * @return */ public static Cache getCache(EntityManagerFactory emf) { return getSessionFactory(emf).getCache(); } /** * * * @param em */ public static void evictLevel1Cache(EntityManager em) { em.clear(); } /** * ?jpa EntityManager * * @param em * @see #evictLevel2Cache(javax.persistence.EntityManagerFactory) */ public static void evictLevel2Cache(EntityManager em) { evictLevel2Cache(em.getEntityManagerFactory()); } /** * ?jpa EntityManagerFactory * 1? * 2?? * 3? * ? * jpa Cache api ?evict ? * * @param emf * @see org.hibernate.jpa.internal.EntityManagerFactoryImpl.JPACache#evictAll() */ public static void evictLevel2Cache(EntityManagerFactory emf) { Cache cache = Hibernates.getCache(emf); cache.evictEntityRegions(); cache.evictCollectionRegions(); cache.evictDefaultQueryRegion(); cache.evictQueryRegions(); cache.evictNaturalIdRegions(); } }