首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能自动分离SqlResultSetMapping实体和EntityManager吗?

我能自动分离SqlResultSetMapping实体和EntityManager吗?
EN

Stack Overflow用户
提问于 2013-10-08 13:48:45
回答 1查看 858关注 0票数 3

我将@SqlResultSetMapping用于纯只读的@Entity (并且数据库中没有备份表)。我正在将数以万计的实体加载到内存中,所以我需要将实体从EntityManager中分离出来,以避免Hibernate在以后工作时检查脏实体。

是否有方法对实体或SqlResultSetMapping进行注释,从而使实体永远不会添加到EntityManager中?

非持久化实体:

代码语言:javascript
复制
@SqlResultSetMapping(name = "fooMapping", entities = @EntityResult(entityClass = Foo.class))
@Entity
public class Foo {
    @Id
    public Long row_id;
    public String name;
}

本机查询:

代码语言:javascript
复制
String sql = "SELECT id AS row_id, friendlyName AS name FROM SomeTable"; 
Query q = JPA.em().createNativeQuery(sql, "fooMapping");
List<Foo> fooList = q.getResultList();

目前的解决办法:

代码语言:javascript
复制
for (Foo f : fooList) {
    JPA.em().detach(f); // 100x improvement for subsequent DB work
}

// subsequent database work
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-08 14:38:46

避免脏检查的一种方法是指示hibernate查询正在获取只读实体。您可以使用查询提示在JPA中完成此操作。

代码语言:javascript
复制
q.setHint("org.hibernate.readOnly",true);

来自冬眠病

org.hibernate.readOnly:通过此查询检索的实体将以只读模式加载,Hibernate永远不会脏-检查它们或使更改持久(例如。新布尔值(True ),默认为false

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19249532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档