【发布时间】:2014-06-21 04:40:26
【问题描述】:
我需要在不使用我的 Hibernate 实体的情况下运行 NativeQuery 插入命令。但我担心这将如何影响可能完成的任何缓存(L1 / L2)。从我在 blogs/etc 中读到的内容来看,Hibernate 似乎会在遇到任何 NativeQuery 调用时自动刷新所有缓存。
这是真的吗?知道我正在使用本机 sql 调用操作哪些表,我是否能够禁用 Hibernate 的自动刷新并具体控制要刷新的内容和维护的内容?这可以通过注释来完成,还是必须通过调用 EntityManagerFactory.getCache().evict() 来完成?
例如:
entityManager.createNativeQuery(
"INSERT INTO JOIN_TABLE (CONTRACT_ID, ATTACHMENT_ID ) VALUES( ?, ? )"
.setParameter(1, 13)
.setParameter(2, 25)
.executeUpdate();
默认情况下,无论我是否请求,hibernate 似乎都会刷新我的缓存。
2014-06-20 15:00:56,964 [http-bio-8880-exec-3] [127.0.0.1-5385277c1ecbbf5a] INFO org.hibernate.engine.internal.StatisticalLoggingSessionEventListener - Session Metrics {
70000 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
2731000 nanoseconds spent preparing 21 JDBC statements;
11467000 nanoseconds spent executing 21 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
28387000 nanoseconds spent executing 2 flushes (flushing a total of 18 entities and 17 collections);
674000 nanoseconds spent executing 2 partial-flushes (flushing a total of 2 entities and 2 collections)
}
【问题讨论】:
标签: java hibernate caching jpa