当前位置: 首页 > 面试题库 >

Persistence.createEntityManagerFactory()需要很长时间才能返回

宇文智敏
2023-03-14
问题内容

我正在使用Hibernate 4.2,JPA 2.0和Postgres 9.2

代码卡在 Persistence.createEntityManagerFactory("peristence_unit_name");

在进一步调查中,我发现Hibernate调用getTypeInfo()java.sql.DatabaseMetaDataclass
方法。此方法尝试加载有关每个数据库对象的元数据

/**
 * Perform the extraction
 *
 * @param metaData The JDBC metadata
 *
 * @return The extracted metadata
 */
public static LinkedHashSet<TypeInfo> extractTypeInfo(DatabaseMetaData metaData) {
    LinkedHashSet<TypeInfo> typeInfoSet = new LinkedHashSet<TypeInfo>();
    try {
        ResultSet resultSet = metaData.getTypeInfo(); // << Gets stuck here.
        try {
             ......

的代码getTypeInfo()是Postgers的JDBC驱动程序的一部分,而确实是花费时间来执行该方法的驱动程序(我加载了驱动程序源并尝试了跟踪)。但是由于这个问题在Hibernate
3.3(我之前使用过)中没有发生,所以我认为Hibernate 3.3并未调用此方法,而Hibernate 4.2却在调用。

有办法解决这个问题吗?注意,与Hibernate 3.3相同的设置可以正常工作。

额外信息:驾驶员在这段时间内一直在做什么:

它首先获取数据库对象的列表,然后循环遍历结果集以获取每个对象的元数据。

数据库中大约有3000个对象(我有一个非常大的数据集,需要很多分区表。加上PostGIS拥有许多自己的对象)

每个对象查找大约需要1秒,因此大约需要3000秒才能完成调用。


问题答案:

我有同样的问题,由于某种原因,它需要很长时间才能提取JDBC元数据以进行hibernate。您只需关闭使用jsbc元数据进行hibernate,它将变得非常快。但是请记住,hibernate状态不使用jdbc元数据,而是使用一些默认值。

要尝试将此设置hibernate.temp.use_jdbc_metadata_defaults为false。

 <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>


 类似资料:
  • 问题内容: 升级到macOS Sierra之后,“ sbt测试”(包括查找本地主机名称/ IP地址)的性能似乎出现问题。在OS X的早期版本中,大约需要40-50秒才能完成。macOS Sierra时间远不止于此。我上次跑步大约是15分钟。编译时间与“ El Capitan”上的时间大致相同。 我是团队中唯一尝试使用此新macOS的人,因此我无法确定它是否仅在我的Mac上发生,还是普遍存在。 我的

  • 此代码用于生成excel报告。有15列,如果记录数在1000左右,生成excel表需要近10-15分钟。上面的代码有什么问题吗?如何提高性能(Excel报告生成时间减少)?

  • 问题内容: 我有一个以datetime为参数的查询,我们观察到的是,如果通过变量提供datetime参数,则执行查询的时间比直接对参数进行硬编码要多2 -3倍,是否有任何原因或解决方案?对此 以下查询大约需要5分钟才能返回结果 虽然作为 它会在10到20秒内返回 我并不总是希望在列上使用索引进行搜索。 按照kevchadders的建议,我看到执行计划有很大的不同。使用日期变量的查询正在执行聚集索引

  • 我使用javamail通过IMAP协议从exchage帐户读取邮件。这些邮件是纯格式的,内容是XML。 几乎所有这些邮件的大小都很短(通常小于100Kb)。然而,有时我不得不处理大型邮件(大约10Mb-15Mb)。例如,昨天我收到一封13Mb大小的电子邮件。仅仅读它就花了50多分钟。这正常吗?有没有办法提高它的性能?代码是: 花费如此长时间的方法是。我做错了什么?有什么提示吗? 非常感谢,我的英语

  • 问题内容: 当使用请求库请求Web资源或网站或Web服务时,请求需要很长时间才能完成。该代码类似于以下内容: 此请求需要2分钟(恰好是2分钟10秒)才能完成!为什么这么慢,我该如何解决? 问题答案: 这个问题可以有多种可能的解决方案。关于StackOverflow的答案很多,因此,我将尝试将它们全部组合起来,以免您寻找它们的麻烦。 在搜索中,我发现了以下几层: 对于许多问题,激活日志记录可以帮助您

  • 给出结果需要20多秒,而在mongo控制台中同样的查询需要不到一秒。 为什么会出现这种情况,如何减少速度差距?