Загрузка коллекции String в модель из постоянного объекта с помощью спящего режима и SpringJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Загрузка коллекции String в модель из постоянного объекта с помощью спящего режима и Spring

Сообщение Anonymous »

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

Код: Выделить всё

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Метод, который я использовал для загрузки списка, находится внутри транзакции. Но когда я пытаюсь поместить список в модель, я получаю вышеуказанное исключение. Из этого я делаю вывод, что спящий режим требует от меня наличия даже этой строки кода в транзакции. Но если это не операция с базой данных, почему?

Код: Выделить всё

@RequestMapping(value="{id}", method=RequestMethod.POST)
public String addComment(@PathVariable String id, Model model, String comment) {
personService.addComment(Long.parseLong(id), comment);
Person person = personService.getPersonById(Long.parseLong(id));
model.addAttribute(person);
List comments = personService.getComments(id);
model.addAttribute(comments);
return "/Review";
}
Объект службы.

Код: Выделить всё

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public class PersonServiceImpl implements PersonService {

private Workaround personDAO;

public PersonServiceImpl() {
}

@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public void savePerson(Person person) {
personDAO.savePerson(person);
}

@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public Person getPersonById(long id) {
return personDAO.getPersonById(id);
}

@Autowired
public void setPersonDAO(Workaround personDAO) {
this.personDAO = personDAO;
}

@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public List
 getAllPeople() {
return personDAO.getAllPeople();
}

@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public void addComment(Long id, String comment) {
Person person = getPersonById(id);
person.addComment(comment);
savePerson(person);
}

@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public List getComments(String id) {
return personDAO.getComments(Long.parseLong(id));
}
DAO

Код: Выделить всё

import java.util.List;

import javax.persistence.ElementCollection;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class PersonDAO implements Workaround {
private SessionFactory sessionFactory;

@Autowired
public PersonDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

private Session currentSession() {
return sessionFactory.getCurrentSession();
}

public void addPerson(Person person) {
currentSession().save(person);
}

public Person getPersonById(long id) {
return (Person) currentSession().get(Person.class, id);
}

public void savePerson(Person person) {
currentSession().save(person);
}

public List
 getAllPeople() {
List people = currentSession().createQuery("from Person").list();
return people;

}

public List getComments(long id) {
return getPersonById(id).getComments();
}

Подробнее здесь: https://stackoverflow.com/questions/135 ... bernate-an
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»