首页 > 解决方案 > EntityManager (setHint) 只读和会话只读有什么区别?

问题描述

我正在尝试将某些实体加载为只读,我注意到我有一些选项可以做到这一点,例如 @Immutable 并且在查询中也是只读的。

我的主要问题是 setHint 之间有什么区别:

    getEntityManager().createQuery("SELECT p FROM Post p").setHint(QueryHints.READ_ONLY, true).getResultList();

和 setReadOnly:

    Query query = session.createQuery("SELECT p FROM Post p");
    query.setReadOnly(true);
    query.list();

它们是一样的吗?

标签: hibernatejpa

解决方案


同样的事情: javax.persistence.TypedQuery.setHint(String, Object)(org.hibernate.jpa.spi.AbstractQueryImpl.setHint(String, Object)) 的休眠实现间接调用 org.hibernate.Query.setReadOnly(boolean ):

org.hibernate.Query.setReadOnly(boolean)
called by org.hibernate.jpa.internal.QueryImplapplyReadOnlyHint(boolean)
called by org.hibernate.jpa.spi.BaseQueryImplsetHint(String, Object)
called by org.hibernate.jpa.spi.AbstractQueryImpl.setHint(String, Object)

推荐阅读