gpt4 book ai didi

java - 我可以从 EntityManager 自动分离 SqlResultSetMapping 实体吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:27:47 25 4
gpt4 key购买 nike

我正在为纯只读的@Entity 使用@SqlResultSetMapping(并且在数据库中没有支持表)。我正在将数以万计的实体加载到内存中,因此我需要将实体与 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

最佳答案

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

q.setHint("org.hibernate.readOnly",true);

来自 hibernate doc :

org.hibernate.readOnly : Entities retrieved by this query will be loaded in a read-only mode where Hibernate will never dirty-check them or make changes persistent ( eg. new Boolean(true) ), default to false

关于java - 我可以从 EntityManager 自动分离 SqlResultSetMapping 实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com