我有一个使用hibernate的应用程序,我使用entityManager。 我想知道,如果我从另一个应用程序命中数据库,我需要配置什么来休眠,不要缓存任何东西,并直接将所有内容保存到DB。如果有什么要配置或我不需要配置它并且根本不使用缓存..?
_entityManagerFactory = Persistence.createEntityManagerFactory( "database" );
更新/合并的例子
EntityManager entityManager = _entityManagerFactory.createEntityManager( );
try {
entityManager.getTransaction( ).begin( );
entityManager.merge( object );
} finally {
entityManager.getTransaction( ).commit( );
entityManager.close( );
}
答案 0 :(得分:0)
你可以在hibernate中控制2级缓存,但是1级缓存是强制性的。
关注http://www.tutorialspoint.com/hibernate/hibernate_caching.htm
答案 1 :(得分:0)
JPA有两级缓存:
第一级缓存是持久化上下文。 JPA EntityManager
在持久化上下文中维护一组受管实体。第一级缓存是强制性的,无法关闭;它还保证了事务中的对象标识。
JPA第二级(L2)
缓存在各种持久性上下文中共享实体状态。使用二级缓存是可选的。启用后,如果找到,将从L2
缓存加载在持久性上下文中找不到的实体。
如果您使用的是Hibernate JPA持久性提供程序,则默认情况下不会配置L2
缓存。但默认情况下,EclipseLink中对二级缓存的支持是打开的。以下语句是从HERE复制的:
默认情况下,EclipseLink使用缓存a的共享对象缓存 持久性单元读取和保留的所有对象的子集。该 EclipseLink共享缓存与本地EntityManager缓存不同。 共享缓存在持久性单元的持续时间内存在 (EntityManagerFactory或服务器)并由所有EntityManagers共享 和持久性单元的用户。本地EntityManager缓存是 不共享,仅在EntityManager或者持续时间内存在 事务。
也可以禁用共享缓存。这可以使用 持久性单元属性:
<property name="eclipselink.cache.shared.default" value="false"/>
因此,如果您使用的是Hibernate持久性提供程序,则不需要任何特殊配置,因为默认情况下未配置L2
缓存。如果您使用的是EclipseLink
,则可以按上述方式将其停用。