отдельный список из запроса - PullRequest
1 голос
/ 25 июля 2011

Я хочу выполнить запрос, но результаты должны быть доступны только для чтения. И им может потребоваться обновление, и я не хочу обновлять каждый элемент в списке. Я бы лучше повторил запрос. Таким образом, я хочу, чтобы все результаты были отделены. То, что я сейчас делаю, это

List<Ent> lst = (List<Ent>)em.createQuery("FROM Ent").getResultList();
for (Ent l:lst) em.detach(l);

Но мне это кажется неправильным.

Есть ли лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 25 июля 2011

Похоже, что вы не хотите, чтобы возвращаемые объекты управлялись контекстом постоянства. Можно рассмотреть возможность использования StatelessSession , поскольку все, возвращаемое с помощью StatelessSession, находится в отключенном состоянии и не управляется постоянный контекст

StatelessSession session = sessionFactory.openStatelessSession();
List<Ent> lst  = session.createQuery("FROM DeviceTree").getResultList(); //All the returned Ent are in the detached state

Обратите внимание, что StatelessSession не реализует кэш первого уровня, второй уровень или кэш запросов. Все, что вы делаете, приводит к немедленным операциям SQL. Вы можете думать так же, как при использовании простого JDBC, за исключением того, что вы получаете выгоду от сопоставленных постоянных классов.


1012 * Ссылка *

0 голосов
/ 25 июля 2011

Может быть, Hibernate не поддерживает метод detach ()?Вы можете скопировать ваши сущности в новый тип объекта и вернуть эти отсоединенные сущности вызывающей стороне.

Здесь есть несколько похожих вопросов на эту тему в StackOverflow: Отсоединение сущности от контекста персистентности JPA / EJB3

0 голосов
/ 25 июля 2011

Сделать список как немодифицируемый список

Ваш код будет

List<Ent> lst = (List<Ent>)em.createQuery("FROM DeviceTree").getResultList();
lst =(List) Collections.unmodifiableCollection(lst );

Образец

 List arl = new ArrayList();
        arl.add("sk");
        arl.add("sk2");
        System.out.println("...."+arl);
        arl =(List) Collections.unmodifiableCollection(arl);
try{
        arl.add("sk3");  // it will give exception
}catch(exception ex
{ex.printStackTrace();}     System.out.println("...."+arl);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...