gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:19:08 27 4
gpt4 key购买 nike

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

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

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

/**
* 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 秒。

最佳答案

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

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

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

关于hibernate - Persistence.createEntityManagerFactory() 需要很长时间才能返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23969399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com