- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在从事一个使用 NHibernate 作为 ORM 的项目。
相当多的实体可以作为“只读”加载到 session 中,因为它们不应在检索后更新。
我尝试用两种不同的方式来做到这一点:
var entity = criteria.UniqueResult<MyType>();
_session.SetReadOnly(entity, true);
或:
criteria.SetReadOnly(true);
然而,在这两种方式中,我都可以看到该实体存在于 ISession 的 PersistenceContext
中。
这正常吗?我希望,由于该实体是只读/不可变的,因此它不应出现在 PersistenceContext 中。实体类型是复杂类型;它与其他类型有多种关联。
最佳答案
nhibernate 中的只读功能有一些限制。该函数的名称让人期待更严格的防止对象更改的保证。如果您查看文档 (http://nhibernate.info/doc/nh/en/index.html#readonly),会发现许多异常可能导致数据库发生意外更改。
来自文档:
当一个实体是只读的时候:
在某些方面,NHibernate 将只读实体与非只读实体一样对待:
考虑到您的期望,它认为对象总是被添加到持久性上下文中,即使它们是只读加载的。否则 Identity-Map -Pattern 将不成立。在 Persistence-Context 中有一个标志表明实体是只读的。
在上下文中,可以通过打开单个实体条目来检查状态。
关于c# - 在 NHibernate 中作为 ReadOnly 获取的实体存在于 PersistenceContext 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30052595/
我当前在刷新 PersistenceContext 中的数据时遇到问题。我有一个 CMT EJB3 bean,它调用 BMT EJB3 bean。在 BMT bean 中,我对对象执行一些处理逻辑。我
据我了解,交易完成后不会立即刷新。它们位于内存中的缓存中,只有在 EntityManager 确定这样做具有成本效益时才会写入数据库。我相信在这种情况下使用了 L1 缓存,但如果我错了请纠正我。 我的
我创建了一个 PersonDao 对象,它是一个应该使用注入(inject)实体管理器的可注入(inject) bean。问题是 @PersistenceContext() 没有注入(inject)我
根据许多示例,可以像这样将 EntityManager 注入(inject) @Stateless 或 @Singleton EJB: @Stateless // or @Singleton publ
我已经使用多个实体管理器工厂和多个事务管理器定义了多个持久性单元。我知道我可以通过向持久性上下文提供单元名称来访问相应的实体管理器,如下所示。 @PersistenceContext(unitName
我尝试创建 BaseDao 并向其注入(inject) EntityManager。在 Spring 我做了这个: public abstract class BaseJpaDao implement
我正在使用 JPA 2.1,我有这样的东西 public class EntityManagerProducer { @Produces @PersistenceContext(uni
我将 JPA 用于我的应用程序的数据访问层。 我为每个表(实体)都有一个 DAO 类,在每个表中我都通过以下方式获得实体管理器@PersistenceContext 注释。但最近我读到,这意味着我的每
我想这个问题很简单。我不知道该怎么做,我唯一的猜测是: @PersistenceContext("Bibliothouris" + RunParallelized.thread) protected
我正在尝试使用 Delta Spike (@RunWith(CdiTestRunner.class)) 在单元测试中让 CDI(使用 Open Web Beans)工作。依赖注入(inject)工作正
这是我的java类: public class Finder { @PersistenceContext(unitName = "abc") EntityManager em; publi
EntityManager @Inject[ed] 在多个类中是否是线程安全的? @PersistenceContext(unitName="blah") private EntityManager
在几个项目中我已经成功使用 @PersistenceUnit(unitName = "MiddlewareJPA") EntityManagerFactory emf; ... EntityManag
我有两个不同的 EntityManager,我想在其相关 EntityManagerFactory 的遗留类(无 bean) 中使用 @PersistenceContext(name = "entit
基于这个例子: @Service public class Purchase { @PersistenceContext private EntityManager em; @Autowi
我正在使用 Wildfly 创建一个简单的 CRUD 应用程序来管理图书(查找和保留) 但是 EntityManager 总是返回 null。 我尝试了 Persistence.createEntit
我们正在使用 Spring 3.1、JPA(通过 Hibernate)和 Quartz。通常,我们通过 Service bean 上的 @PersistenceContext 注释以及 SpringM
我正在使用 Wildfly 10、Jersey,并使用 @Inject 注入(inject)依赖项。我有 DAO 和 Service 接口(interface),其实现在 CustomBinder 中
我想知道当我调用 session= session.getCurrentSession() 时,hibernate 何时完成上下文 session 问题是我的 dao 中有 2 个方法调用 getCu
尝试通过注释 PersistenceContext 访问 EntityManager 时出现 NullPointerException import javax.ejb.Stateless; impo
我是一名优秀的程序员,十分优秀!