Persistence.createEntityManagerFactory()需要很长时间才能返回
我正在使用Hibernate 4.2,JPA 2.0和Postgres 9.2
代码卡在 Persistence.createEntityManagerFactory("peristence_unit_name");
在进一步调查中,我发现Hibernate调用getTypeInfo()
了java.sql.DatabaseMetaData
class
方法。此方法尝试加载有关每个数据库对象的元数据
/**
* 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>
-
SQL查询和datetime参数需要很长时间才能执行
2021-06-04 关注 0 浏览61 1答案
-
Jvm需要很长时间才能解析localhost的IP地址
2021-02-02 关注 0 浏览73 1答案
-
Python请求很慢,并且需要很长时间才能完成HTTP或HTTPS请求
2021-01-29 关注 0 浏览209 1答案
-
Django单元测试需要很长时间才能创建测试数据库
2021-01-29 关注 0 浏览89 1答案
-
恢复模型需要很长时间
2021-01-29 关注 0 浏览162 1答案
-
sqlite插入需要很长时间
2021-05-10 关注 0 浏览85 1答案
-
Flutter 花费了很长时间才能连接到浏览器
2021-01-31 关注 0 浏览178 1答案
-
更新x设置y = null需要很长时间
2021-03-27 关注 0 浏览123 1答案
-
Eclipse的“加载描述符”需要很长时间
2021-02-02 关注 0 浏览64 1答案
-
在Tomcat上进行战争部署需要很长时间
2021-02-01 关注 0 浏览193 1答案