【发布时间】:2018-04-09 12:03:23
【问题描述】:
我正在使用 PostgreSQL 数据库,我想使用 JPA EntityManager 启动 VACUUM FULL。
版本 1
public void doVacuum(){
entityManager.createNativeQuery("VACUUM FULL").executeUpdate()
}
抛出 TransactionRequiredException
第 2 版
@Transactional
public void doVacuum(){
entityManager.createNativeQuery("VACUUM FULL").executeUpdate()
}
抛出 PersistenceException "VACUUM 不能在事务块内运行"
第 3 版
public void doVacuum(){
entityManager.createNativeQuery("VACUUM FULL").getResultList()
}
执行真空,但之后我得到 PersistenceException "No results"
启动这条sql命令的正确方法是什么?
【问题讨论】:
-
这真的应该在 JPA 范围内完成吗?我并不是说这是坏事,但这不是 DBA 的事吗?您是否正在尝试使用 JPA 开发 DBA 工具?但仍然很有趣。
-
获取底层连接并回退到原始 JDBC?有关获取连接的机制,请参见此处:stackoverflow.com/questions/3493495/…
标签: java postgresql jpa vacuum