我将@SqlResultSetMapping用于纯只读的@Entity (并且数据库中没有备份表)。我正在将数以万计的实体加载到内存中,所以我需要将实体从EntityManager中分离出来,以避免Hibernate在以后工作时检查脏实体。
是否有方法对实体或SqlResultSetMapping进行注释,从而使实体永远不会添加到EntityManager中?
非持久化实体:
@SqlResultSetMapping(name = "fooMapping", entities = @EntityResult(entityClass = Foo.class))
@Entity
public class Foo {
@Id
public Long row_id;
public String name;
}本机查询:
String sql = "SELECT id AS row_id, friendlyName AS name FROM SomeTable";
Query q = JPA.em().createNativeQuery(sql, "fooMapping");
List<Foo> fooList = q.getResultList();目前的解决办法:
for (Foo f : fooList) {
JPA.em().detach(f); // 100x improvement for subsequent DB work
}
// subsequent database work发布于 2013-10-08 14:38:46
避免脏检查的一种方法是指示hibernate查询正在获取只读实体。您可以使用查询提示在JPA中完成此操作。
q.setHint("org.hibernate.readOnly",true);来自冬眠病
org.hibernate.readOnly:通过此查询检索的实体将以只读模式加载,Hibernate永远不会脏-检查它们或使更改持久(例如。新布尔值(True ),默认为false
https://stackoverflow.com/questions/19249532
复制相似问题