【发布时间】:2016-02-21 17:38:52
【问题描述】:
这是我第一次使用休眠,所以我有一个小问题。 这种使用 hibernate 5.1 和 hikariCP 2.4.3 的方式正确吗?
我不确定池是否是这样工作的。
我应该打电话吗
Session session = sessionFactory.openSession();
或
Session session = sessionFactory.getCurrentSession();
参加会议? 当我打电话时
session.close();
连接是关闭还是归还给池。
HibernateDataStore 被线程用于访问数据库
感谢帮助
配置
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.provider_class">
org.hibernate.hikaricp.internal.HikariCPConnectionProvider
</property>
<property name="hibernate.hikari.dataSourceClassName">
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
</property>
<property name="hibernate.hikari.dataSource.url">
jdbc:mysql://localhost/xyz
</property>
<property name="hibernate.hikari.dataSource.user">user</property>
<property name="hibernate.hikari.dataSource.password">xyz</property>
<property name="hibernate.hikari.minimumIdle">20</property>
<property name="hibernate.hikari.maximumPoolSize">100</property>
<property name="hibernate.current_session_context_class">
org.hibernate.context.internal.ThreadLocalSessionContext
</property>
<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- Names the annotated entity class -->
<mapping class="XYZ"/>
</session-factory>
</hibernate-configuration>
我的数据存储类
public class HibernateDataStore implements DataStore {
private static final Logger logger = LogManager.getLogger();
/** factory for hibernate sessions */
private static SessionFactory sessionFactory;
static {
setUpHibernate();
}
/**
* set up the hibernate session-factory
*/
private static void setUpHibernate() {
logger.debug("building session factory");
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure( "config/server/hibernate.cfg.xml" )
.build();
try {
sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
logger.error("problems building hibernate sessionFactory " + e.getMessage());
// The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
// so destroy it manually.
StandardServiceRegistryBuilder.destroy( registry );
}
logger.debug("finished building session factory");
}
@Override
public void storeProduct(Product product) {
logger.info("storing product: " + product.getTitle());
Instant start = Instant.now();
final Session session = sessionFactory.openSession();
//final Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save( product );
session.getTransaction().commit();
session.close();
Instant stop = Instant.now();
logger.debug("product saved (took " + Duration.between(start, stop).toMillis() + "ms)");
}
}
【问题讨论】:
-
本地休眠,而不是 JPA?没有其他框架可以帮助您?
-
我没有使用 jpa,因为我读过它有一些限制,我不想浪费时间
-
您应该使用 Spring 或 Java EE 来帮助您完成引导部分。 JPA 是要走的路,对于“限制”部分,您也可以使用 JPA 中的 Hibernate。
-
我没有建立一个新项目。我不能使用 spring 或 java ee。我将尝试将 dataStore 转换为 JPA