为什么我无法关闭 Hibernate SessionFactory 并重新打开它并且它仍然可以工作?

2024-01-01

我在关闭 Hibernate 会话工厂时遇到问题,我的应用程序允许用户重新创建数据库,因此当他们想要这样做时,我首先关闭 Hibernate 会话工厂以释放 Hibernate 对数据库的控制。

public static void closeFactory()
{
    if(factory != null)
    {
        factory.close();
    }
}

然后我等了几秒钟,这似乎有帮助

  Thread.sleep(10000);

然后我重新创建数据库(FWIW 常规休眠和 Envers - 我需要为要创建的 Envers 表创建工厂),并再次关闭工厂。

public static void recreateDatabase()
{
    Configuration config;
    config =
            HibernateUtil.getInitializedConfigurationAndRebuildAuditTables();
    new SchemaExport(config).create(true, true);
    factory = config.buildSessionFactory();
    factory.close();
    factory=null;
}

但是当我测试一个会话时:

public static Session getSession()
{
    if (factory == null)
    {
       createFactory();
    }
    Session hibernateSession = factory.openSession();
    return hibernateSession;
}

并尝试使用它来访问基于 Hibernate 的类(Song.class),但它失败了

org.hibernate.exception.SQLGrammarException: Table "SONG" not found; SQL statement:

基本上它看不到任何桌子。

我可以通过在重新创建表后不关闭 SessionFactory 来阻止此问题

public static void recreateDatabase()
{
    Configuration config;
    config =
            HibernateUtil.getInitializedConfigurationAndRebuildAuditTables();
    new SchemaExport(config).create(true, true);
    factory = config.buildSessionFactory();
}

然而这有两个问题

  1. 我不明白为什么我无法关闭并重新打开工厂
  2. 我最初寻找这段代码是因为我偶尔会遇到 Hibernate 问题,并且我希望能够重置会话工厂。

谁能向我解释一下吗?

Note

如果没有

工厂 = config.buildSessionFactory();线

在 createDatabase() 方法中创建表后我得到

  .......
    create index IDX_SONG_CHANGES_REPORTID on SongChanges (reportId)

    alter table Song_CoverArt 
        add constraint FKE29AB716436A2867 
        foreign key (Song_recNo) 
        references Song

    alter table Song_CoverArt 
        add constraint FKE29AB716792380A 
        foreign key (coverArts_id) 
        references CoverArt
Sep 10, 2014 2:03:45 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete

而有了那条线我得到

..............
 create index IDX_SONG_CHANGES_REPORTID on SongChanges (reportId)

    alter table Song_CoverArt 
        add constraint FKE29AB716436A2867 
        foreign key (Song_recNo) 
        references Song

    alter table Song_CoverArt 
        add constraint FKE29AB716792380A 
        foreign key (coverArts_id) 
        references CoverArt
Sep 10, 2014 2:07:27 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete
Sep 10, 2014 2:07:27 PM org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator instantiateExplicitConnectionProvider
INFO: HHH000130: Instantiating explicit connection provider: org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
Sep 10, 2014 2:07:27 PM org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider configure
INFO: HHH010002: C3P0 using driver: org.h2.Driver at URL: jdbc:h2:Database/songlayer;FILE_LOCK=SOCKET;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;CACHE_SIZE=50000
Sep 10, 2014 2:07:27 PM org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider configure
INFO: HHH000046: Connection properties: {user=jaikoz, password=****}
Sep 10, 2014 2:07:27 PM org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider configure
INFO: HHH000006: Autocommit mode: false
Sep 10, 2014 2:07:27 PM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@2faff047 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@8f17d9e0 [ acquireIncrement -> 3, acquireRetryAttempts -> 10, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge15494qjod2z19iq4cc|2925bf5b, idleConnectionTestPeriod -> 3000, initialPoolSize -> 3, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 300, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 0, maxStatementsPerConnection -> 50, minPoolSize -> 20, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@3f342714 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1hge15494qjod2z19iq4cc|45c7e403, jdbcUrl -> jdbc:h2:Database/songlayer;FILE_LOCK=SOCKET;MVCC=TRUE;DB_CLOSE_ON_EXIT=FALSE;CACHE_SIZE=50000, properties -> {user=******, password=******} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1hge15494qjod2z19iq4cc|710f4dc7, numHelperThreads -> 10 ]
Sep 10, 2014 2:07:27 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
Sep 10, 2014 2:07:27 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
Sep 10, 2014 2:07:27 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
Sep 10, 2014 2:07:27 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Sep 10, 2014 2:07:28 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000227: Running hbm2ddl schema export
Sep 10, 2014 2:07:28 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: alter table Song_AUD drop constraint FK5F61F486DF74E053
Sep 10, 2014 2:07:28 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: Constraint "FK5F61F486DF74E053" not found; SQL statement:
alter table Song_AUD drop constraint FK5F61F486DF74E053 [90057-166]
Sep 10, 2014 2:07:28 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: HHH000389: Unsuccessful: alter table Song_CoverArt_AUD drop constraint FK19C969E7DF74E053
Sep 10, 2014 2:07:28 PM org.hibernate.tool.hbm2ddl.SchemaExport perform
ERROR: Constraint "FK19C969E7DF74E053" not found; SQL statement:
alter table Song_CoverArt_AUD drop constraint FK19C969E7DF74E053 [90057-166]
Sep 10, 2014 2:07:29 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: HHH000230: Schema export complete

我不明白为什么,但这是必要的。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法关闭 Hibernate SessionFactory 并重新打开它并且它仍然可以工作? 的相关文章

  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • Struts 2 + Sitemesh 3 集成 - FreemarkerDecoratorServlet 中的 NPE

    我将 Struts 2 版本 2 3 14 3 与 Sitemesh 3 版本 3 0 alpha 2 一起使用 并且在某些情况下遇到 NullPointerException 首先 这是我的 web xml 中的 struts2 site
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s

随机推荐

  • Spring Boot 集成测试不读取属性文件

    我想创建集成测试 其中 Spring Boot 将使用从 properties 文件读取值 Value注解 但每次我运行测试时 我的断言都会失败 因为 Spring 无法读取该值 org junit ComparisonFailure Ex
  • 如何在 Outlook 签名中嵌入图像?

    是否可以为以下内容创建 HTML 电子邮件签名 2003年展望或上面不引用外部图像 也就是说 使用那些特殊的 cid 引用 但将图像本身嵌入到签名中 而不是嵌入到文件系统或网络中 这是一个 Web 应用程序 它根据用户的各种输入生成 标准
  • 使用 javascript 中的类加载 php 页面

    我在 javascript 中有弹出类 并在我的 html 页面中添加了显示该弹出窗口所需的所有脚本 我正在尝试在单击表单的提交按钮时在弹出窗口中加载 PHP 页面 弹出窗口对于如下按钮工作正常 来自 select php 的文本显示在弹出
  • 通过 Xcode 克隆特定的 git 分支

    我在从 Apple Xcode 克隆特定 git 分支时遇到困难 在 Xcode gt 源代码管理 gt 克隆并插入我的 HTTP 克隆 url 中 我只能克隆主分支 但我没有找到从 Xcode 克隆另一个开发人员分支的解决方案 通过使用终
  • 我可以读取文件并在编译时构造异构对象吗?

    情况 YAML 文件包含按名称排列的异构对象列表 如下所示 object Foo name Joe Bloggs age 26 object Bar location UK 对象不继承任何基类 也不共享彼此之间的任何类型的关系 除了它们看起
  • 将 javascript 和 css 内联放入一个缩小的 html 文件中以提高性能?

    一个典型的网站由一个index html 文件和一堆javascript 和css 文件组成 为了提高网站的性能 可以 缩小 javascript 和 css 文件 以减小文件大小 将 javascript 文件连接成一个文件 与 css
  • 当过滤器存在时使用数组设置范围值

    我想将某个范围的值获取到一个数组中 处理数组数据 然后将该数组中的值设置回它来自的范围 考虑到该范围可能包含一些隐藏行 让我们以两列的工作表为例 A B VALUE FILTER 1 P 2 N 3 N 4 P 5 P 然后应用自动过滤器并
  • 如何正确编写 int、double、float 等的数学扩展方法?

    我想编写一系列扩展方法来简化数学运算 例如 代替 Math Pow 2 5 我希望能够写 2 Power 5 在我看来 这更清楚 问题是 在编写扩展方法时如何处理不同的数字类型 我需要为每种类型编写一个扩展方法吗 public static
  • 如果满足条件,Reactor如何重复某个步骤n次

    请帮我处理反应堆 我需要检查一个条件最多n次并返回最终结果 我发现reactor有reactor extra模块 https projectreactor io docs extra snapshot api reactor retry R
  • 比较两个文本文件并将差异写入文本文件

    我想比较两个文本文件并将差异输出到另一个文本文件中 Location c temp z txt compare object get content c temp hostname old txt get content c temp ho
  • 这句话是什么意思

    unlike SwingUtilities invokeAndWait the event thread is permitted to call SwingUtilities invokeLater 我无法清楚地理解这一点 请帮助我 另一
  • Angular 6 router - 替换当前路由的一些参数

    在我的 Angular 6 解决方案中 网址具有以下结构 语言 app section object id view queryparams 语言选择器组件由应用程序的所有部分共享 并且包含在父路由之一的模板中 以便它出现在所有子路由中 当
  • 如何使用 xlwings 保存工作簿?

    我有一个 Excel 工作表 一些按钮和一些宏 我使用 xlwings 来使其工作 有没有办法通过 xlwings 保存工作簿 我想在执行操作后提取特定的工作表 但保存的工作表是操作前提取的工作表 没有生成的数据 我提取所需工作表的代码如下
  • PowerShell 帮助文件无法正确显示

    在 Windows 10 和 Windows Server 2012 上的 PowerShell 4 0 5 0 中进行了测试 clear help wmiobject or cls man job 清除屏幕后 帮助文件无法正确显示结果 重
  • Pandas 的 concat 函数中的“级别”、“键”和名称参数是什么?

    问题 我该如何使用pd concat 是什么levels论据 是什么keys论据 是否有很多示例可以帮助解释如何使用所有参数 Pandas concat函数是瑞士军刀 https en wikipedia org wiki Swiss Ar
  • 是否可以清除 Ionic 中的视图缓存?

    我目前正在开发 Angular Ionic Cordova 项目 我们最近升级到了最新的 Ionic beta 从项目之前使用的版本开始 这里引入了视图缓存 然而这样做也带来了一个问题 该应用程序面向客户 并且非常以数据为中心 然而 目前用
  • ng-repeat 中的角度验证不起作用

    我很难使用 ng repeat 语句进行验证 我有以下代码 我只是希望当名称字段为空时将 has error 添加到 div form group 中 我似乎无法让它发挥作用 有什么想法吗 我在小提琴手中的尝试 http jsfiddle
  • Admob 在 Google Admob 面板中找不到转账资金链接 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 google admob 中找不到转账资金链接 我的余额超过 50 美元 并且我的付款信息已填写完整 但我无法转账 请帮助 我在哪里
  • 如何检查网站是否支持 HTTP/2 协议

    关于这个问题有很多话题HTTP 2 https en wikipedia org wiki HTTP 2协议 但我想知道是否有一个使用该协议的工作网站 I e 我们可以决定使用http or https 但是我们如何编写 HTTP 2 请求
  • 为什么我无法关闭 Hibernate SessionFactory 并重新打开它并且它仍然可以工作?

    我在关闭 Hibernate 会话工厂时遇到问题 我的应用程序允许用户重新创建数据库 因此当他们想要这样做时 我首先关闭 Hibernate 会话工厂以释放 Hibernate 对数据库的控制 public static void clos