Я использую @SqlResultSetMapping
для @Entity
, который является чисто доступным только для чтения (и в базе данных нет базы данных). Я загружаю десятки тысяч из них в память, поэтому мне нужно отделить объекты от EntityManager, чтобы избежать проверки грязной сущности Hibernate, когда я буду работать позже.Могу ли я автоматически отключить SqlResultSetMapping Entity от EntityManager?
Есть ли способ аннотировать объект Entity или SqlResultSetMapping, чтобы сущности никогда не добавлялись в EntityManager?
Non-PERSISTED лицо:
@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
Я думаю, что это достаточно безопасно, потому что другим программистам легко следовать на примере. Профилирование предполагает, что он эффективен как 'for (Foo f: fooList) {JPA.em(). Detach (f); } '. –